home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / cpu / t11 / t11ops.c < prev    next >
Text File  |  1999-08-05  |  77KB  |  1,392 lines

  1. /*** t11: Portable DEC T-11 emulator ******************************************
  2.  
  3.     Copyright (C) Aaron Giles 1998
  4.  
  5.     Actual opcode implementation.  Excuse the excessive use of macros, it
  6.     was the only way I could bear to type all this in!
  7.  
  8. *****************************************************************************/
  9.  
  10.  
  11. /* given a register index 'r', this computes the effective address for a byte-sized operation
  12.    and puts the result in 'ea' */
  13. #define MAKE_EAB_RGD(r) ea = REGD(r)
  14. #define MAKE_EAB_IN(r)  ea = REGD(r); REGW(r) += ((r) < 6 ? 1 : 2)
  15. #define MAKE_EAB_INS(r) ea = REGD(r); REGW(r) += ((r) < 6 ? 1 : 2)
  16. #define MAKE_EAB_IND(r) ea = REGD(r); REGW(r) += 2; ea = RWORD(ea)
  17. #define MAKE_EAB_DE(r)  REGW(r) -= ((r) < 6 ? 1 : 2); ea = REGD(r)
  18. #define MAKE_EAB_DED(r) REGW(r) -= 2; ea = REGD(r); ea = RWORD(ea)
  19. #define MAKE_EAB_IX(r)  ea = ROPCODE(); ea = (ea + REGD(r)) & 0xffff
  20. #define MAKE_EAB_IXD(r) ea = ROPCODE(); ea = (ea + REGD(r)) & 0xffff; ea = RWORD(ea)
  21.  
  22. /* given a register index 'r', this computes the effective address for a word-sized operation
  23.    and puts the result in 'ea' */
  24. /* note that word accesses ignore the low bit!! this fixes APB! */
  25. #define MAKE_EAW_RGD(r) MAKE_EAB_RGD(r)
  26. #define MAKE_EAW_IN(r)  ea = REGD(r); REGW(r) += 2
  27. #define MAKE_EAW_IND(r) MAKE_EAB_IND(r)
  28. #define MAKE_EAW_DE(r)  REGW(r) -= 2; ea = REGD(r)
  29. #define MAKE_EAW_DED(r) MAKE_EAB_DED(r)
  30. #define MAKE_EAW_IX(r)  MAKE_EAB_IX(r)
  31. #define MAKE_EAW_IXD(r) MAKE_EAB_IXD(r)
  32.  
  33. /* extracts the source/destination register index from the opcode into 'sreg' or 'dreg' */
  34. #define GET_SREG sreg = (t11.op >> 6) & 7
  35. #define GET_DREG dreg = t11.op & 7
  36.  
  37. /* for a byte-sized source operand: extracts 'sreg', computes 'ea', and loads the value into 'source' */
  38. #define GET_SB_RG  GET_SREG; source = REGB(sreg)
  39. #define GET_SB_RGD GET_SREG; MAKE_EAB_RGD(sreg); source = RBYTE(ea)
  40. #define GET_SB_IN  GET_SREG; if (sreg == 7) { source = ROPCODE(); } else { MAKE_EAB_IN(sreg); source = RBYTE(ea); }
  41. #define GET_SB_IND GET_SREG; if (sreg == 7) { ea = ROPCODE(); } else { MAKE_EAB_IND(sreg); } source = RBYTE(ea)
  42. #define GET_SB_DE  GET_SREG; MAKE_EAB_DE(sreg); source = RBYTE(ea)
  43. #define GET_SB_DED GET_SREG; MAKE_EAB_DED(sreg); source = RBYTE(ea)
  44. #define GET_SB_IX  GET_SREG; MAKE_EAB_IX(sreg); source = RBYTE(ea)
  45. #define GET_SB_IXD GET_SREG; MAKE_EAB_IXD(sreg); source = RBYTE(ea)
  46.  
  47. /* for a word-sized source operand: extracts 'sreg', computes 'ea', and loads the value into 'source' */
  48. #define GET_SW_RG  GET_SREG; source = REGD(sreg)
  49. #define GET_SW_RGD GET_SREG; MAKE_EAW_RGD(sreg); source = RWORD(ea)
  50. #define GET_SW_IN  GET_SREG; if (sreg == 7) { source = ROPCODE(); } else { MAKE_EAW_IN(sreg); source = RWORD(ea); }
  51. #define GET_SW_IND GET_SREG; if (sreg == 7) { ea = ROPCODE(); } else { MAKE_EAW_IND(sreg); } source = RWORD(ea)
  52. #define GET_SW_DE  GET_SREG; MAKE_EAW_DE(sreg); source = RWORD(ea)
  53. #define GET_SW_DED GET_SREG; MAKE_EAW_DED(sreg); source = RWORD(ea)
  54. #define GET_SW_IX  GET_SREG; MAKE_EAW_IX(sreg); source = RWORD(ea)
  55. #define GET_SW_IXD GET_SREG; MAKE_EAW_IXD(sreg); source = RWORD(ea)
  56.  
  57. /* for a byte-sized destination operand: extracts 'dreg', computes 'ea', and loads the value into 'dest' */
  58. #define GET_DB_RG  GET_DREG; dest = REGB(dreg)
  59. #define GET_DB_RGD GET_DREG; MAKE_EAB_RGD(dreg); dest = RBYTE(ea)
  60. #define GET_DB_IN  GET_DREG; MAKE_EAB_IN(dreg); dest = RBYTE(ea)
  61. #define GET_DB_IND GET_DREG; if (dreg == 7) { ea = ROPCODE(); } else { MAKE_EAB_IND(dreg); } dest = RBYTE(ea)
  62. #define GET_DB_DE  GET_DREG; MAKE_EAB_DE(dreg); dest = RBYTE(ea)
  63. #define GET_DB_DED GET_DREG; MAKE_EAB_DED(dreg); dest = RBYTE(ea)
  64. #define GET_DB_IX  GET_DREG; MAKE_EAB_IX(dreg); dest = RBYTE(ea)
  65. #define GET_DB_IXD GET_DREG; MAKE_EAB_IXD(dreg); dest = RBYTE(ea)
  66.  
  67. /* for a word-sized destination operand: extracts 'dreg', computes 'ea', and loads the value into 'dest' */
  68. #define GET_DW_RG  GET_DREG; dest = REGD(dreg)
  69. #define GET_DW_RGD GET_DREG; MAKE_EAW_RGD(dreg); dest = RWORD(ea)
  70. #define GET_DW_IN  GET_DREG; MAKE_EAW_IN(dreg); dest = RWORD(ea)
  71. #define GET_DW_IND GET_DREG; if (dreg == 7) { ea = ROPCODE(); } else { MAKE_EAW_IND(dreg); } dest = RWORD(ea)
  72. #define GET_DW_DE  GET_DREG; MAKE_EAW_DE(dreg); dest = RWORD(ea)
  73. #define GET_DW_DED GET_DREG; MAKE_EAW_DED(dreg); dest = RWORD(ea)
  74. #define GET_DW_IX  GET_DREG; MAKE_EAW_IX(dreg); dest = RWORD(ea)
  75. #define GET_DW_IXD GET_DREG; MAKE_EAW_IXD(dreg); dest = RWORD(ea)
  76.  
  77. /* writes a value to a previously computed 'ea' */
  78. #define PUT_DB_EA(v) WBYTE(ea, (v))
  79. #define PUT_DW_EA(v) WWORD(ea, (v))
  80.  
  81. /* writes a value to a previously computed 'dreg' register */
  82. #define PUT_DB_DREG(v) REGB(dreg) = (v)
  83. #define PUT_DW_DREG(v) REGW(dreg) = (v)
  84.  
  85. /* for a byte-sized destination operand: extracts 'dreg', computes 'ea', and writes 'v' to it */
  86. #define PUT_DB_RG(v)  GET_DREG; REGB(dreg) = (v)
  87. #define PUT_DB_RGD(v) GET_DREG; MAKE_EAB_RGD(dreg); WBYTE(ea, (v))
  88. #define PUT_DB_IN(v)  GET_DREG; MAKE_EAB_IN(dreg); WBYTE(ea, (v))
  89. #define PUT_DB_IND(v) GET_DREG; if (dreg == 7) { ea = ROPCODE(); } else { MAKE_EAB_IND(dreg); } WBYTE(ea, (v))
  90. #define PUT_DB_DE(v)  GET_DREG; MAKE_EAB_DE(dreg); WBYTE(ea, (v))
  91. #define PUT_DB_DED(v) GET_DREG; MAKE_EAB_DED(dreg); WBYTE(ea, (v))
  92. #define PUT_DB_IX(v)  GET_DREG; MAKE_EAB_IX(dreg); WBYTE(ea, (v))
  93. #define PUT_DB_IXD(v) GET_DREG; MAKE_EAB_IXD(dreg); WBYTE(ea, (v))
  94.  
  95. /* for a word-sized destination operand: extracts 'dreg', computes 'ea', and writes 'v' to it */
  96. #define PUT_DW_RG(v)  GET_DREG; REGW(dreg) = (v)
  97. #define PUT_DW_RGD(v) GET_DREG; MAKE_EAW_RGD(dreg); WWORD(ea, (v))
  98. #define PUT_DW_IN(v)  GET_DREG; MAKE_EAW_IN(dreg); WWORD(ea, (v))
  99. #define PUT_DW_IND(v) GET_DREG; if (dreg == 7) { ea = ROPCODE(); } else { MAKE_EAW_IND(dreg); } WWORD(ea, (v))
  100. #define PUT_DW_DE(v)  GET_DREG; MAKE_EAW_DE(dreg); WWORD(ea, (v))
  101. #define PUT_DW_DED(v) GET_DREG; MAKE_EAW_DED(dreg); WWORD(ea, (v))
  102. #define PUT_DW_IX(v)  GET_DREG; MAKE_EAW_IX(dreg); WWORD(ea, (v))
  103. #define PUT_DW_IXD(v) GET_DREG; MAKE_EAW_IXD(dreg); WWORD(ea, (v))
  104.  
  105. /* flag clearing; must be done before setting */
  106. #define CLR_ZV   (PSW &= ~(ZFLAG | VFLAG))
  107. #define CLR_NZV  (PSW &= ~(NFLAG | ZFLAG | VFLAG))
  108. #define CLR_NZVC (PSW &= ~(NFLAG | ZFLAG | VFLAG | CFLAG))
  109.  
  110. /* set individual flags byte-sized */
  111. #define SETB_N (PSW |= (result >> 4) & 0x08)
  112. #define SETB_Z (PSW |= ((result & 0xff) == 0) << 2)
  113. #define SETB_V (PSW |= ((source ^ dest ^ result ^ (result >> 1)) >> 6) & 0x02)
  114. #define SETB_C (PSW |= (result >> 8) & 0x01)
  115. #define SETB_NZ SETB_N; SETB_Z
  116. #define SETB_NZV SETB_N; SETB_Z; SETB_V
  117. #define SETB_NZVC SETB_N; SETB_Z; SETB_V; SETB_C
  118.  
  119. /* set individual flags word-sized */
  120. #define SETW_N (PSW |= (result >> 12) & 0x08)
  121. #define SETW_Z (PSW |= ((result & 0xffff) == 0) << 2)
  122. #define SETW_V (PSW |= ((source ^ dest ^ result ^ (result >> 1)) >> 14) & 0x02)
  123. #define SETW_C (PSW |= (result >> 16) & 0x01)
  124. #define SETW_NZ SETW_N; SETW_Z
  125. #define SETW_NZV SETW_N; SETW_Z; SETW_V
  126. #define SETW_NZVC SETW_N; SETW_Z; SETW_V; SETW_C
  127.  
  128. /* operations */
  129. /* ADC: dst += C */
  130. #define ADC_R(d)    int dreg, source, dest, result;     source = GET_C; GET_DW_##d; CLR_NZVC; result = dest + source; SETW_NZVC; PUT_DW_DREG(result)
  131. #define ADC_M(d)    int dreg, source, dest, result, ea; source = GET_C; GET_DW_##d; CLR_NZVC; result = dest + source; SETW_NZVC; PUT_DW_EA(result)
  132. #define ADCB_R(d)   int dreg, source, dest, result;     source = GET_C; GET_DB_##d; CLR_NZVC; result = dest + source; SETB_NZVC; PUT_DB_DREG(result)
  133. #define ADCB_M(d)   int dreg, source, dest, result, ea; source = GET_C; GET_DB_##d; CLR_NZVC; result = dest + source; SETB_NZVC; PUT_DB_EA(result)
  134. /* ADD: dst += src */
  135. #define ADD_R(s,d)  int sreg, dreg, source, dest, result;     GET_SW_##s; GET_DW_##d; CLR_NZVC; result = dest + source; SETW_NZVC; PUT_DW_DREG(result)
  136. #define ADD_X(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZVC; result = dest + source; SETW_NZVC; PUT_DW_DREG(result)
  137. #define ADD_M(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZVC; result = dest + source; SETW_NZVC; PUT_DW_EA(result)
  138. /* ASL: dst = (dst << 1); C = (dst >> 7) */
  139. #define ASL_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZVC; result = dest << 1; SETW_NZ; PSW |= (dest >> 15) & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_DREG(result)
  140. #define ASL_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZVC; result = dest << 1; SETW_NZ; PSW |= (dest >> 15) & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_EA(result)
  141. #define ASLB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZVC; result = dest << 1; SETB_NZ; PSW |= (dest >> 7) & 1;  PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_DREG(result)
  142. #define ASLB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZVC; result = dest << 1; SETB_NZ; PSW |= (dest >> 7) & 1;  PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_EA(result)
  143. /* ASR: dst = (dst << 1); C = (dst >> 7) */
  144. #define ASR_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZVC; result = (dest >> 1) | (dest & 0x8000); SETW_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_DREG(result)
  145. #define ASR_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZVC; result = (dest >> 1) | (dest & 0x8000); SETW_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_EA(result)
  146. #define ASRB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZVC; result = (dest >> 1) | (dest & 0x80);   SETB_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_DREG(result)
  147. #define ASRB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZVC; result = (dest >> 1) | (dest & 0x80);   SETB_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_EA(result)
  148. /* BIC: dst &= ~src */
  149. #define BIC_R(s,d)  int sreg, dreg, source, dest, result;     GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest & ~source; SETW_NZ; PUT_DW_DREG(result)
  150. #define BIC_X(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest & ~source; SETW_NZ; PUT_DW_DREG(result)
  151. #define BIC_M(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest & ~source; SETW_NZ; PUT_DW_EA(result)
  152. #define BICB_R(s,d) int sreg, dreg, source, dest, result;     GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest & ~source; SETB_NZ; PUT_DB_DREG(result)
  153. #define BICB_X(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest & ~source; SETB_NZ; PUT_DB_DREG(result)
  154. #define BICB_M(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest & ~source; SETB_NZ; PUT_DB_EA(result)
  155. /* BIS: dst |= src */
  156. #define BIS_R(s,d)  int sreg, dreg, source, dest, result;     GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest | source; SETW_NZ; PUT_DW_DREG(result)
  157. #define BIS_X(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest | source; SETW_NZ; PUT_DW_DREG(result)
  158. #define BIS_M(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest | source; SETW_NZ; PUT_DW_EA(result)
  159. #define BISB_R(s,d) int sreg, dreg, source, dest, result;     GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest | source; SETB_NZ; PUT_DB_DREG(result)
  160. #define BISB_X(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest | source; SETB_NZ; PUT_DB_DREG(result)
  161. #define BISB_M(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest | source; SETB_NZ; PUT_DB_EA(result)
  162. /* BIT: flags = dst & src */
  163. #define BIT_R(s,d)  int sreg, dreg, source, dest, result;     GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest & source; SETW_NZ;
  164. #define BIT_M(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZV; result = dest & source; SETW_NZ;
  165. #define BITB_R(s,d) int sreg, dreg, source, dest, result;     GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest & source; SETB_NZ;
  166. #define BITB_M(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZV; result = dest & source; SETB_NZ;
  167. /* BR: if (condition) branch */
  168. #define BR(c)        if (c) { PC += 2 * (signed char)(t11.op & 0xff); }
  169. /* CLR: dst = 0 */
  170. #define CLR_R(d)    int dreg;     PUT_DW_##d(0); CLR_NZVC; SET_Z
  171. #define CLR_M(d)    int dreg, ea; PUT_DW_##d(0); CLR_NZVC; SET_Z
  172. #define CLRB_R(d)   int dreg;     PUT_DB_##d(0); CLR_NZVC; SET_Z
  173. #define CLRB_M(d)   int dreg, ea; PUT_DB_##d(0); CLR_NZVC; SET_Z
  174. /* CMP: flags = src - dst */
  175. #define CMP_R(s,d)  int sreg, dreg, source, dest, result;     GET_SW_##s; GET_DW_##d; CLR_NZVC; result = source - dest; SETW_NZVC;
  176. #define CMP_M(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZVC; result = source - dest; SETW_NZVC;
  177. #define CMPB_R(s,d) int sreg, dreg, source, dest, result;     GET_SB_##s; GET_DB_##d; CLR_NZVC; result = source - dest; SETB_NZVC;
  178. #define CMPB_M(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZVC; result = source - dest; SETB_NZVC;
  179. /* COM: dst = ~dst */
  180. #define COM_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZVC; result = ~dest; SETW_NZ; SET_C; PUT_DW_DREG(result)
  181. #define COM_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZVC; result = ~dest; SETW_NZ; SET_C; PUT_DW_EA(result)
  182. #define COMB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZVC; result = ~dest; SETB_NZ; SET_C; PUT_DB_DREG(result)
  183. #define COMB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZVC; result = ~dest; SETB_NZ; SET_C; PUT_DB_EA(result)
  184. /* DEC: dst -= 1 */
  185. #define DEC_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZV; result = dest - 1; SETW_NZ; if (dest == 0x8000) SET_V; PUT_DW_DREG(result)
  186. #define DEC_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZV; result = dest - 1; SETW_NZ; if (dest == 0x8000) SET_V; PUT_DW_EA(result)
  187. #define DECB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZV; result = dest - 1; SETB_NZ; if (dest == 0x80)   SET_V; PUT_DB_DREG(result)
  188. #define DECB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZV; result = dest - 1; SETB_NZ; if (dest == 0x80)   SET_V; PUT_DB_EA(result)
  189. /* INC: dst += 1 */
  190. #define INC_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZV; result = dest + 1; SETW_NZ; if (dest == 0x7fff) SET_V; PUT_DW_DREG(result)
  191. #define INC_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZV; result = dest + 1; SETW_NZ; if (dest == 0x7fff) SET_V; PUT_DW_EA(result)
  192. #define INCB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZV; result = dest + 1; SETB_NZ; if (dest == 0x7f)   SET_V; PUT_DB_DREG(result)
  193. #define INCB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZV; result = dest + 1; SETB_NZ; if (dest == 0x7f)   SET_V; PUT_DB_EA(result)
  194. /* JMP: PC = ea */
  195. #define JMP(d)      int dreg, ea; GET_DREG; MAKE_EAW_##d(dreg); PC = ea
  196. /* JSR: PUSH src, src = PC, PC = ea */
  197. #define JSR(d)      int sreg, dreg, ea; GET_SREG; GET_DREG; MAKE_EAW_##d(dreg); PUSH(REGW(sreg)); REGW(sreg) = PC; PC = ea
  198. /* MFPS: dst = flags */
  199. #define MFPS_R(d)   int dreg, result;     result = PSW; CLR_NZV; SETB_NZ; PUT_DW_##d((signed char)result)
  200. #define MFPS_M(d)   int dreg, result, ea; result = PSW; CLR_NZV; SETB_NZ; PUT_DB_##d(result)
  201. /* MOV: dst = src */
  202. #define MOV_R(s,d)  int sreg, dreg, source, result;     GET_SW_##s; CLR_NZV; result = source; SETW_NZ; PUT_DW_##d(result)
  203. #define MOV_M(s,d)  int sreg, dreg, source, result, ea; GET_SW_##s; CLR_NZV; result = source; SETW_NZ; PUT_DW_##d(result)
  204. #define MOVB_R(s,d) int sreg, dreg, source, result;     GET_SB_##s; CLR_NZV; result = source; SETB_NZ; PUT_DW_##d((signed char)result)
  205. #define MOVB_X(s,d) int sreg, dreg, source, result, ea; GET_SB_##s; CLR_NZV; result = source; SETB_NZ; PUT_DW_##d((signed char)result)
  206. #define MOVB_M(s,d) int sreg, dreg, source, result, ea; GET_SB_##s; CLR_NZV; result = source; SETB_NZ; PUT_DB_##d(result)
  207. /* MTPS: flags = src */
  208. #define MTPS_R(d)   int dreg, dest;     GET_DW_##d; PSW = (PSW & ~0xef) | (dest & 0xef); t11_check_irqs()
  209. #define MTPS_M(d)   int dreg, dest, ea; GET_DW_##d; PSW = (PSW & ~0xef) | (dest & 0xef); t11_check_irqs()
  210. /* NEG: dst = -dst */
  211. #define NEG_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZVC; result = -dest; SETW_NZ; if (dest == 0x8000) SET_V; if (result) SET_C; PUT_DW_DREG(result)
  212. #define NEG_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZVC; result = -dest; SETW_NZ; if (dest == 0x8000) SET_V; if (result) SET_C; PUT_DW_EA(result)
  213. #define NEGB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZVC; result = -dest; SETB_NZ; if (dest == 0x80)   SET_V; if (result) SET_C; PUT_DB_DREG(result)
  214. #define NEGB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZVC; result = -dest; SETB_NZ; if (dest == 0x80)   SET_V; if (result) SET_C; PUT_DB_EA(result)
  215. /* ROL: dst = (dst << 1) | C; C = (dst >> 7) */
  216. #define ROL_R(d)    int dreg, dest, result;     GET_DW_##d; result = (dest << 1) | GET_C; CLR_NZVC; SETW_NZ; PSW |= (dest >> 15) & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_DREG(result)
  217. #define ROL_M(d)    int dreg, dest, result, ea; GET_DW_##d; result = (dest << 1) | GET_C; CLR_NZVC; SETW_NZ; PSW |= (dest >> 15) & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_EA(result)
  218. #define ROLB_R(d)   int dreg, dest, result;     GET_DB_##d; result = (dest << 1) | GET_C; CLR_NZVC; SETB_NZ; PSW |= (dest >> 7) & 1;  PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_DREG(result)
  219. #define ROLB_M(d)   int dreg, dest, result, ea; GET_DB_##d; result = (dest << 1) | GET_C; CLR_NZVC; SETB_NZ; PSW |= (dest >> 7) & 1;  PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_EA(result)
  220. /* ROR: dst = (dst >> 1) | (C << 7); C = dst & 1 */
  221. #define ROR_R(d)    int dreg, dest, result;     GET_DW_##d; result = (dest >> 1) | (GET_C << 15); CLR_NZVC; SETW_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_DREG(result)
  222. #define ROR_M(d)    int dreg, dest, result, ea; GET_DW_##d; result = (dest >> 1) | (GET_C << 15); CLR_NZVC; SETW_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DW_EA(result)
  223. #define RORB_R(d)   int dreg, dest, result;     GET_DB_##d; result = (dest >> 1) | (GET_C << 7);  CLR_NZVC; SETB_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_DREG(result)
  224. #define RORB_M(d)   int dreg, dest, result, ea; GET_DB_##d; result = (dest >> 1) | (GET_C << 7);  CLR_NZVC; SETB_NZ; PSW |= dest & 1; PSW |= ((PSW << 1) ^ (PSW >> 2)) & 2; PUT_DB_EA(result)
  225. /* SBC: dst -= C */
  226. #define SBC_R(d)    int dreg, source, dest, result;     source = GET_C; GET_DW_##d; CLR_NZVC; result = dest - source; SETW_NZVC; PUT_DW_DREG(result)
  227. #define SBC_M(d)    int dreg, source, dest, result, ea; source = GET_C; GET_DW_##d; CLR_NZVC; result = dest - source; SETW_NZVC; PUT_DW_EA(result)
  228. #define SBCB_R(d)   int dreg, source, dest, result;     source = GET_C; GET_DB_##d; CLR_NZVC; result = dest - source; SETB_NZVC; PUT_DB_DREG(result)
  229. #define SBCB_M(d)   int dreg, source, dest, result, ea; source = GET_C; GET_DB_##d; CLR_NZVC; result = dest - source; SETB_NZVC; PUT_DB_EA(result)
  230. /* SUB: dst -= src */
  231. #define SUB_R(s,d)  int sreg, dreg, source, dest, result;     GET_SW_##s; GET_DW_##d; CLR_NZVC; result = dest - source; SETW_NZVC; PUT_DW_DREG(result)
  232. #define SUB_X(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZVC; result = dest - source; SETW_NZVC; PUT_DW_DREG(result)
  233. #define SUB_M(s,d)  int sreg, dreg, source, dest, result, ea; GET_SW_##s; GET_DW_##d; CLR_NZVC; result = dest - source; SETW_NZVC; PUT_DW_EA(result)
  234. #define SUBB_R(s,d) int sreg, dreg, source, dest, result;     GET_SB_##s; GET_DB_##d; CLR_NZVC; result = dest - source; SETB_NZVC; PUT_DB_DREG(result)
  235. #define SUBB_X(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZVC; result = dest - source; SETB_NZVC; PUT_DB_DREG(result)
  236. #define SUBB_M(s,d) int sreg, dreg, source, dest, result, ea; GET_SB_##s; GET_DB_##d; CLR_NZVC; result = dest - source; SETB_NZVC; PUT_DB_EA(result)
  237. /* SWAB: dst = (dst >> 8) + (dst << 8) */
  238. #define SWAB_R(d)   int dreg, dest, result;     GET_DW_##d; CLR_NZVC; result = ((dest >> 8) & 0xff) + (dest << 8); SETB_NZ; PUT_DW_DREG(result)
  239. #define SWAB_M(d)   int dreg, dest, result, ea; GET_DW_##d; CLR_NZVC; result = ((dest >> 8) & 0xff) + (dest << 8); SETB_NZ; PUT_DW_EA(result)
  240. /* SXT: dst = sign-extend dst */
  241. #define SXT_R(d)    int dreg, result;     CLR_ZV; if (GET_N) result = -1; else { result = 0; SET_Z; } PUT_DW_##d(result)
  242. #define SXT_M(d)    int dreg, result, ea; CLR_ZV; if (GET_N) result = -1; else { result = 0; SET_Z; } PUT_DW_##d(result)
  243. /* TST: dst = ~dst */
  244. #define TST_R(d)    int dreg, dest, result;     GET_DW_##d; CLR_NZVC; result = dest; SETW_NZ;
  245. #define TST_M(d)    int dreg, dest, result, ea; GET_DW_##d; CLR_NZVC; result = dest; SETW_NZ;
  246. #define TSTB_R(d)   int dreg, dest, result;     GET_DB_##d; CLR_NZVC; result = dest; SETB_NZ;
  247. #define TSTB_M(d)   int dreg, dest, result, ea; GET_DB_##d; CLR_NZVC; result = dest; SETB_NZ;
  248. /* XOR: dst ^= src */
  249. #define XOR_R(d)    int sreg, dreg, source, dest, result;     GET_SREG; source = REGW(sreg); GET_DW_##d; CLR_NZV; result = dest ^ source; SETW_NZ; PUT_DW_DREG(result)
  250. #define XOR_M(d)    int sreg, dreg, source, dest, result, ea; GET_SREG; source = REGW(sreg); GET_DW_##d; CLR_NZV; result = dest ^ source; SETW_NZ; PUT_DW_EA(result)
  251.  
  252.  
  253.  
  254. static void op_0000(void)
  255. {
  256.     switch (t11.op & 0x3f)
  257.     {
  258.         case 0x00:    /* HALT  */ t11_ICount = 0; break;
  259.         case 0x01:    /* WAIT  */ t11.wait_state = 1; t11_ICount = 0; break;
  260.         case 0x02:    /* RTI   */ PC = POP(); PSW = POP(); t11_check_irqs(); break;
  261.         case 0x03:    /* BPT   */ PUSH(PSW); PUSH(PC); PC = RWORD(0x0c); PSW = RWORD(0x0e); t11_check_irqs(); break;
  262.         case 0x04:    /* IOT   */ PUSH(PSW); PUSH(PC); PC = RWORD(0x10); PSW = RWORD(0x12); t11_check_irqs(); break;
  263.         case 0x05:    /* RESET */ break;
  264.         case 0x06:    /* RTT   */ PC = POP(); PSW = POP(); t11_check_irqs(); break;
  265.         default:     illegal(); break;
  266.     }
  267. }
  268.  
  269. static void illegal(void)
  270. {
  271.     PUSH(PSW);
  272.     PUSH(PC);
  273.     PC = RWORD(0x08);
  274.     PSW = RWORD(0x0a);
  275.     t11_check_irqs();
  276. PC = 0;
  277. }
  278.  
  279. static void jmp_rgd(void)       { JMP(RGD); }
  280. static void jmp_in(void)        { JMP(IN);  }
  281. static void jmp_ind(void)       { JMP(IND); }
  282. static void jmp_de(void)        { JMP(DE);  }
  283. static void jmp_ded(void)       { JMP(DED); }
  284. static void jmp_ix(void)        { JMP(IX);  }
  285. static void jmp_ixd(void)       { JMP(IXD); }
  286.  
  287. static void rts(void)
  288. {
  289.     int dreg;
  290.     GET_DREG;
  291.     PC = REGD(dreg);
  292.     REGW(dreg) = POP();
  293. }
  294.  
  295. static void ccc(void)            { PSW &= ~(t11.op & 15); }
  296. static void scc(void)            { PSW |=  (t11.op & 15); }
  297.  
  298. static void swab_rg(void)       { SWAB_R(RG); }
  299. static void swab_rgd(void)      { SWAB_M(RGD); }
  300. static void swab_in(void)       { SWAB_M(IN); }
  301. static void swab_ind(void)      { SWAB_M(IND); }
  302. static void swab_de(void)       { SWAB_M(DE); }
  303. static void swab_ded(void)      { SWAB_M(DED); }
  304. static void swab_ix(void)       { SWAB_M(IX); }
  305. static void swab_ixd(void)      { SWAB_M(IXD); }
  306.  
  307. static void br(void)            { BR(1); }
  308. static void bne(void)           { BR(!GET_Z); }
  309. static void beq(void)           { BR( GET_Z); }
  310. static void bge(void)           { BR(!((GET_N >> 2) ^ GET_V)); }
  311. static void blt(void)           { BR(((GET_N >> 2) ^ GET_V)); }
  312. static void bgt(void)           { BR(!GET_Z && !((GET_N >> 2) ^ GET_V)); }
  313. static void ble(void)           { BR( GET_Z || ((GET_N >> 2) ^ GET_V)); }
  314.  
  315. static void jsr_rgd(void)       { JSR(RGD); }
  316. static void jsr_in(void)        { JSR(IN);  }
  317. static void jsr_ind(void)       { JSR(IND); }
  318. static void jsr_de(void)        { JSR(DE);  }
  319. static void jsr_ded(void)       { JSR(DED); }
  320. static void jsr_ix(void)        { JSR(IX);  }
  321. static void jsr_ixd(void)       { JSR(IXD); }
  322.  
  323. static void clr_rg(void)        { CLR_R(RG);  }
  324. static void clr_rgd(void)       { CLR_M(RGD); }
  325. static void clr_in(void)        { CLR_M(IN);  }
  326. static void clr_ind(void)       { CLR_M(IND); }
  327. static void clr_de(void)        { CLR_M(DE);  }
  328. static void clr_ded(void)       { CLR_M(DED); }
  329. static void clr_ix(void)        { CLR_M(IX);  }
  330. static void clr_ixd(void)       { CLR_M(IXD); }
  331.  
  332. static void com_rg(void)        { COM_R(RG);  }
  333. static void com_rgd(void)       { COM_M(RGD); }
  334. static void com_in(void)        { COM_M(IN);  }
  335. static void com_ind(void)       { COM_M(IND); }
  336. static void com_de(void)        { COM_M(DE);  }
  337. static void com_ded(void)       { COM_M(DED); }
  338. static void com_ix(void)        { COM_M(IX);  }
  339. static void com_ixd(void)       { COM_M(IXD); }
  340.  
  341. static void inc_rg(void)        { INC_R(RG);  }
  342. static void inc_rgd(void)       { INC_M(RGD); }
  343. static void inc_in(void)        { INC_M(IN);  }
  344. static void inc_ind(void)       { INC_M(IND); }
  345. static void inc_de(void)        { INC_M(DE);  }
  346. static void inc_ded(void)       { INC_M(DED); }
  347. static void inc_ix(void)        { INC_M(IX);  }
  348. static void inc_ixd(void)       { INC_M(IXD); }
  349.  
  350. static void dec_rg(void)        { DEC_R(RG);  }
  351. static void dec_rgd(void)       { DEC_M(RGD); }
  352. static void dec_in(void)        { DEC_M(IN);  }
  353. static void dec_ind(void)       { DEC_M(IND); }
  354. static void dec_de(void)        { DEC_M(DE);  }
  355. static void dec_ded(void)       { DEC_M(DED); }
  356. static void dec_ix(void)        { DEC_M(IX);  }
  357. static void dec_ixd(void)       { DEC_M(IXD); }
  358.  
  359. static void neg_rg(void)        { NEG_R(RG);  }
  360. static void neg_rgd(void)       { NEG_M(RGD); }
  361. static void neg_in(void)        { NEG_M(IN);  }
  362. static void neg_ind(void)       { NEG_M(IND); }
  363. static void neg_de(void)        { NEG_M(DE);  }
  364. static void neg_ded(void)       { NEG_M(DED); }
  365. static void neg_ix(void)        { NEG_M(IX);  }
  366. static void neg_ixd(void)       { NEG_M(IXD); }
  367.  
  368. static void adc_rg(void)        { ADC_R(RG);  }
  369. static void adc_rgd(void)       { ADC_M(RGD); }
  370. static void adc_in(void)        { ADC_M(IN);  }
  371. static void adc_ind(void)       { ADC_M(IND); }
  372. static void adc_de(void)        { ADC_M(DE);  }
  373. static void adc_ded(void)       { ADC_M(DED); }
  374. static void adc_ix(void)        { ADC_M(IX);  }
  375. static void adc_ixd(void)       { ADC_M(IXD); }
  376.  
  377. static void sbc_rg(void)        { SBC_R(RG);  }
  378. static void sbc_rgd(void)       { SBC_M(RGD); }
  379. static void sbc_in(void)        { SBC_M(IN);  }
  380. static void sbc_ind(void)       { SBC_M(IND); }
  381. static void sbc_de(void)        { SBC_M(DE);  }
  382. static void sbc_ded(void)       { SBC_M(DED); }
  383. static void sbc_ix(void)        { SBC_M(IX);  }
  384. static void sbc_ixd(void)       { SBC_M(IXD); }
  385.  
  386. static void tst_rg(void)        { TST_R(RG);  }
  387. static void tst_rgd(void)       { TST_M(RGD); }
  388. static void tst_in(void)        { TST_M(IN);  }
  389. static void tst_ind(void)       { TST_M(IND); }
  390. static void tst_de(void)        { TST_M(DE);  }
  391. static void tst_ded(void)       { TST_M(DED); }
  392. static void tst_ix(void)        { TST_M(IX);  }
  393. static void tst_ixd(void)       { TST_M(IXD); }
  394.  
  395. static void ror_rg(void)        { ROR_R(RG);  }
  396. static void ror_rgd(void)       { ROR_M(RGD); }
  397. static void ror_in(void)        { ROR_M(IN);  }
  398. static void ror_ind(void)       { ROR_M(IND); }
  399. static void ror_de(void)        { ROR_M(DE);  }
  400. static void ror_ded(void)       { ROR_M(DED); }
  401. static void ror_ix(void)        { ROR_M(IX);  }
  402. static void ror_ixd(void)       { ROR_M(IXD); }
  403.  
  404. static void rol_rg(void)        { ROL_R(RG);  }
  405. static void rol_rgd(void)       { ROL_M(RGD); }
  406. static void rol_in(void)        { ROL_M(IN);  }
  407. static void rol_ind(void)       { ROL_M(IND); }
  408. static void rol_de(void)        { ROL_M(DE);  }
  409. static void rol_ded(void)       { ROL_M(DED); }
  410. static void rol_ix(void)        { ROL_M(IX);  }
  411. static void rol_ixd(void)       { ROL_M(IXD); }
  412.  
  413. static void asr_rg(void)        { ASR_R(RG);  }
  414. static void asr_rgd(void)       { ASR_M(RGD); }
  415. static void asr_in(void)        { ASR_M(IN);  }
  416. static void asr_ind(void)       { ASR_M(IND); }
  417. static void asr_de(void)        { ASR_M(DE);  }
  418. static void asr_ded(void)       { ASR_M(DED); }
  419. static void asr_ix(void)        { ASR_M(IX);  }
  420. static void asr_ixd(void)       { ASR_M(IXD); }
  421.  
  422. static void asl_rg(void)        { ASL_R(RG);  }
  423. static void asl_rgd(void)       { ASL_M(RGD); }
  424. static void asl_in(void)        { ASL_M(IN);  }
  425. static void asl_ind(void)       { ASL_M(IND); }
  426. static void asl_de(void)        { ASL_M(DE);  }
  427. static void asl_ded(void)       { ASL_M(DED); }
  428. static void asl_ix(void)        { ASL_M(IX);  }
  429. static void asl_ixd(void)       { ASL_M(IXD); }
  430.  
  431. static void sxt_rg(void)        { SXT_R(RG);  }
  432. static void sxt_rgd(void)       { SXT_M(RGD); }
  433. static void sxt_in(void)        { SXT_M(IN);  }
  434. static void sxt_ind(void)       { SXT_M(IND); }
  435. static void sxt_de(void)        { SXT_M(DE);  }
  436. static void sxt_ded(void)       { SXT_M(DED); }
  437. static void sxt_ix(void)        { SXT_M(IX);  }
  438. static void sxt_ixd(void)       { SXT_M(IXD); }
  439.  
  440. static void mov_rg_rg(void)     { MOV_R(RG,RG);   }
  441. static void mov_rg_rgd(void)    { MOV_M(RG,RGD);  }
  442. static void mov_rg_in(void)     { MOV_M(RG,IN);   }
  443. static void mov_rg_ind(void)    { MOV_M(RG,IND);  }
  444. static void mov_rg_de(void)     { MOV_M(RG,DE);   }
  445. static void mov_rg_ded(void)    { MOV_M(RG,DED);  }
  446. static void mov_rg_ix(void)     { MOV_M(RG,IX);   }
  447. static void mov_rg_ixd(void)    { MOV_M(RG,IXD);  }
  448. static void mov_rgd_rg(void)    { MOV_M(RGD,RG);  }
  449. static void mov_rgd_rgd(void)   { MOV_M(RGD,RGD); }
  450. static void mov_rgd_in(void)    { MOV_M(RGD,IN);  }
  451. static void mov_rgd_ind(void)   { MOV_M(RGD,IND); }
  452. static void mov_rgd_de(void)    { MOV_M(RGD,DE);  }
  453. static void mov_rgd_ded(void)   { MOV_M(RGD,DED); }
  454. static void mov_rgd_ix(void)    { MOV_M(RGD,IX);  }
  455. static void mov_rgd_ixd(void)   { MOV_M(RGD,IXD); }
  456. static void mov_in_rg(void)     { MOV_M(IN,RG);   }
  457. static void mov_in_rgd(void)    { MOV_M(IN,RGD);  }
  458. static void mov_in_in(void)     { MOV_M(IN,IN);   }
  459. static void mov_in_ind(void)    { MOV_M(IN,IND);  }
  460. static void mov_in_de(void)     { MOV_M(IN,DE);   }
  461. static void mov_in_ded(void)    { MOV_M(IN,DED);  }
  462. static void mov_in_ix(void)     { MOV_M(IN,IX);   }
  463. static void mov_in_ixd(void)    { MOV_M(IN,IXD);  }
  464. static void mov_ind_rg(void)    { MOV_M(IND,RG);  }
  465. static void mov_ind_rgd(void)   { MOV_M(IND,RGD); }
  466. static void mov_ind_in(void)    { MOV_M(IND,IN);  }
  467. static void mov_ind_ind(void)   { MOV_M(IND,IND); }
  468. static void mov_ind_de(void)    { MOV_M(IND,DE);  }
  469. static void mov_ind_ded(void)   { MOV_M(IND,DED); }
  470. static void mov_ind_ix(void)    { MOV_M(IND,IX);  }
  471. static void mov_ind_ixd(void)   { MOV_M(IND,IXD); }
  472. static void mov_de_rg(void)     { MOV_M(DE,RG);   }
  473. static void mov_de_rgd(void)    { MOV_M(DE,RGD);  }
  474. static void mov_de_in(void)     { MOV_M(DE,IN);   }
  475. static void mov_de_ind(void)    { MOV_M(DE,IND);  }
  476. static void mov_de_de(void)     { MOV_M(DE,DE);   }
  477. static void mov_de_ded(void)    { MOV_M(DE,DED);  }
  478. static void mov_de_ix(void)     { MOV_M(DE,IX);   }
  479. static void mov_de_ixd(void)    { MOV_M(DE,IXD);  }
  480. static void mov_ded_rg(void)    { MOV_M(DED,RG);  }
  481. static void mov_ded_rgd(void)   { MOV_M(DED,RGD); }
  482. static void mov_ded_in(void)    { MOV_M(DED,IN);  }
  483. static void mov_ded_ind(void)   { MOV_M(DED,IND); }
  484. static void mov_ded_de(void)    { MOV_M(DED,DE);  }
  485. static void mov_ded_ded(void)   { MOV_M(DED,DED); }
  486. static void mov_ded_ix(void)    { MOV_M(DED,IX);  }
  487. static void mov_ded_ixd(void)   { MOV_M(DED,IXD); }
  488. static void mov_ix_rg(void)     { MOV_M(IX,RG);   }
  489. static void mov_ix_rgd(void)    { MOV_M(IX,RGD);  }
  490. static void mov_ix_in(void)     { MOV_M(IX,IN);   }
  491. static void mov_ix_ind(void)    { MOV_M(IX,IND);  }
  492. static void mov_ix_de(void)     { MOV_M(IX,DE);   }
  493. static void mov_ix_ded(void)    { MOV_M(IX,DED);  }
  494. static void mov_ix_ix(void)     { MOV_M(IX,IX);   }
  495. static void mov_ix_ixd(void)    { MOV_M(IX,IXD);  }
  496. static void mov_ixd_rg(void)    { MOV_M(IXD,RG);  }
  497. static void mov_ixd_rgd(void)   { MOV_M(IXD,RGD); }
  498. static void mov_ixd_in(void)    { MOV_M(IXD,IN);  }
  499. static void mov_ixd_ind(void)   { MOV_M(IXD,IND); }
  500. static void mov_ixd_de(void)    { MOV_M(IXD,DE);  }
  501. static void mov_ixd_ded(void)   { MOV_M(IXD,DED); }
  502. static void mov_ixd_ix(void)    { MOV_M(IXD,IX);  }
  503. static void mov_ixd_ixd(void)   { MOV_M(IXD,IXD); }
  504.  
  505. static void cmp_rg_rg(void)     { CMP_R(RG,RG);   }
  506. static void cmp_rg_rgd(void)    { CMP_M(RG,RGD);  }
  507. static void cmp_rg_in(void)     { CMP_M(RG,IN);   }
  508. static void cmp_rg_ind(void)    { CMP_M(RG,IND);  }
  509. static void cmp_rg_de(void)     { CMP_M(RG,DE);   }
  510. static void cmp_rg_ded(void)    { CMP_M(RG,DED);  }
  511. static void cmp_rg_ix(void)     { CMP_M(RG,IX);   }
  512. static void cmp_rg_ixd(void)    { CMP_M(RG,IXD);  }
  513. static void cmp_rgd_rg(void)    { CMP_M(RGD,RG);  }
  514. static void cmp_rgd_rgd(void)   { CMP_M(RGD,RGD); }
  515. static void cmp_rgd_in(void)    { CMP_M(RGD,IN);  }
  516. static void cmp_rgd_ind(void)   { CMP_M(RGD,IND); }
  517. static void cmp_rgd_de(void)    { CMP_M(RGD,DE);  }
  518. static void cmp_rgd_ded(void)   { CMP_M(RGD,DED); }
  519. static void cmp_rgd_ix(void)    { CMP_M(RGD,IX);  }
  520. static void cmp_rgd_ixd(void)   { CMP_M(RGD,IXD); }
  521. static void cmp_in_rg(void)     { CMP_M(IN,RG);   }
  522. static void cmp_in_rgd(void)    { CMP_M(IN,RGD);  }
  523. static void cmp_in_in(void)     { CMP_M(IN,IN);   }
  524. static void cmp_in_ind(void)    { CMP_M(IN,IND);  }
  525. static void cmp_in_de(void)     { CMP_M(IN,DE);   }
  526. static void cmp_in_ded(void)    { CMP_M(IN,DED);  }
  527. static void cmp_in_ix(void)     { CMP_M(IN,IX);   }
  528. static void cmp_in_ixd(void)    { CMP_M(IN,IXD);  }
  529. static void cmp_ind_rg(void)    { CMP_M(IND,RG);  }
  530. static void cmp_ind_rgd(void)   { CMP_M(IND,RGD); }
  531. static void cmp_ind_in(void)    { CMP_M(IND,IN);  }
  532. static void cmp_ind_ind(void)   { CMP_M(IND,IND); }
  533. static void cmp_ind_de(void)    { CMP_M(IND,DE);  }
  534. static void cmp_ind_ded(void)   { CMP_M(IND,DED); }
  535. static void cmp_ind_ix(void)    { CMP_M(IND,IX);  }
  536. static void cmp_ind_ixd(void)   { CMP_M(IND,IXD); }
  537. static void cmp_de_rg(void)     { CMP_M(DE,RG);   }
  538. static void cmp_de_rgd(void)    { CMP_M(DE,RGD);  }
  539. static void cmp_de_in(void)     { CMP_M(DE,IN);   }
  540. static void cmp_de_ind(void)    { CMP_M(DE,IND);  }
  541. static void cmp_de_de(void)     { CMP_M(DE,DE);   }
  542. static void cmp_de_ded(void)    { CMP_M(DE,DED);  }
  543. static void cmp_de_ix(void)     { CMP_M(DE,IX);   }
  544. static void cmp_de_ixd(void)    { CMP_M(DE,IXD);  }
  545. static void cmp_ded_rg(void)    { CMP_M(DED,RG);  }
  546. static void cmp_ded_rgd(void)   { CMP_M(DED,RGD); }
  547. static void cmp_ded_in(void)    { CMP_M(DED,IN);  }
  548. static void cmp_ded_ind(void)   { CMP_M(DED,IND); }
  549. static void cmp_ded_de(void)    { CMP_M(DED,DE);  }
  550. static void cmp_ded_ded(void)   { CMP_M(DED,DED); }
  551. static void cmp_ded_ix(void)    { CMP_M(DED,IX);  }
  552. static void cmp_ded_ixd(void)   { CMP_M(DED,IXD); }
  553. static void cmp_ix_rg(void)     { CMP_M(IX,RG);   }
  554. static void cmp_ix_rgd(void)    { CMP_M(IX,RGD);  }
  555. static void cmp_ix_in(void)     { CMP_M(IX,IN);   }
  556. static void cmp_ix_ind(void)    { CMP_M(IX,IND);  }
  557. static void cmp_ix_de(void)     { CMP_M(IX,DE);   }
  558. static void cmp_ix_ded(void)    { CMP_M(IX,DED);  }
  559. static void cmp_ix_ix(void)     { CMP_M(IX,IX);   }
  560. static void cmp_ix_ixd(void)    { CMP_M(IX,IXD);  }
  561. static void cmp_ixd_rg(void)    { CMP_M(IXD,RG);  }
  562. static void cmp_ixd_rgd(void)   { CMP_M(IXD,RGD); }
  563. static void cmp_ixd_in(void)    { CMP_M(IXD,IN);  }
  564. static void cmp_ixd_ind(void)   { CMP_M(IXD,IND); }
  565. static void cmp_ixd_de(void)    { CMP_M(IXD,DE);  }
  566. static void cmp_ixd_ded(void)   { CMP_M(IXD,DED); }
  567. static void cmp_ixd_ix(void)    { CMP_M(IXD,IX);  }
  568. static void cmp_ixd_ixd(void)   { CMP_M(IXD,IXD); }
  569.  
  570. static void bit_rg_rg(void)     { BIT_R(RG,RG);   }
  571. static void bit_rg_rgd(void)    { BIT_M(RG,RGD);  }
  572. static void bit_rg_in(void)     { BIT_M(RG,IN);   }
  573. static void bit_rg_ind(void)    { BIT_M(RG,IND);  }
  574. static void bit_rg_de(void)     { BIT_M(RG,DE);   }
  575. static void bit_rg_ded(void)    { BIT_M(RG,DED);  }
  576. static void bit_rg_ix(void)     { BIT_M(RG,IX);   }
  577. static void bit_rg_ixd(void)    { BIT_M(RG,IXD);  }
  578. static void bit_rgd_rg(void)    { BIT_M(RGD,RG);  }
  579. static void bit_rgd_rgd(void)   { BIT_M(RGD,RGD); }
  580. static void bit_rgd_in(void)    { BIT_M(RGD,IN);  }
  581. static void bit_rgd_ind(void)   { BIT_M(RGD,IND); }
  582. static void bit_rgd_de(void)    { BIT_M(RGD,DE);  }
  583. static void bit_rgd_ded(void)   { BIT_M(RGD,DED); }
  584. static void bit_rgd_ix(void)    { BIT_M(RGD,IX);  }
  585. static void bit_rgd_ixd(void)   { BIT_M(RGD,IXD); }
  586. static void bit_in_rg(void)     { BIT_M(IN,RG);   }
  587. static void bit_in_rgd(void)    { BIT_M(IN,RGD);  }
  588. static void bit_in_in(void)     { BIT_M(IN,IN);   }
  589. static void bit_in_ind(void)    { BIT_M(IN,IND);  }
  590. static void bit_in_de(void)     { BIT_M(IN,DE);   }
  591. static void bit_in_ded(void)    { BIT_M(IN,DED);  }
  592. static void bit_in_ix(void)     { BIT_M(IN,IX);   }
  593. static void bit_in_ixd(void)    { BIT_M(IN,IXD);  }
  594. static void bit_ind_rg(void)    { BIT_M(IND,RG);  }
  595. static void bit_ind_rgd(void)   { BIT_M(IND,RGD); }
  596. static void bit_ind_in(void)    { BIT_M(IND,IN);  }
  597. static void bit_ind_ind(void)   { BIT_M(IND,IND); }
  598. static void bit_ind_de(void)    { BIT_M(IND,DE);  }
  599. static void bit_ind_ded(void)   { BIT_M(IND,DED); }
  600. static void bit_ind_ix(void)    { BIT_M(IND,IX);  }
  601. static void bit_ind_ixd(void)   { BIT_M(IND,IXD); }
  602. static void bit_de_rg(void)     { BIT_M(DE,RG);   }
  603. static void bit_de_rgd(void)    { BIT_M(DE,RGD);  }
  604. static void bit_de_in(void)     { BIT_M(DE,IN);   }
  605. static void bit_de_ind(void)    { BIT_M(DE,IND);  }
  606. static void bit_de_de(void)     { BIT_M(DE,DE);   }
  607. static void bit_de_ded(void)    { BIT_M(DE,DED);  }
  608. static void bit_de_ix(void)     { BIT_M(DE,IX);   }
  609. static void bit_de_ixd(void)    { BIT_M(DE,IXD);  }
  610. static void bit_ded_rg(void)    { BIT_M(DED,RG);  }
  611. static void bit_ded_rgd(void)   { BIT_M(DED,RGD); }
  612. static void bit_ded_in(void)    { BIT_M(DED,IN);  }
  613. static void bit_ded_ind(void)   { BIT_M(DED,IND); }
  614. static void bit_ded_de(void)    { BIT_M(DED,DE);  }
  615. static void bit_ded_ded(void)   { BIT_M(DED,DED); }
  616. static void bit_ded_ix(void)    { BIT_M(DED,IX);  }
  617. static void bit_ded_ixd(void)   { BIT_M(DED,IXD); }
  618. static void bit_ix_rg(void)     { BIT_M(IX,RG);   }
  619. static void bit_ix_rgd(void)    { BIT_M(IX,RGD);  }
  620. static void bit_ix_in(void)     { BIT_M(IX,IN);   }
  621. static void bit_ix_ind(void)    { BIT_M(IX,IND);  }
  622. static void bit_ix_de(void)     { BIT_M(IX,DE);   }
  623. static void bit_ix_ded(void)    { BIT_M(IX,DED);  }
  624. static void bit_ix_ix(void)     { BIT_M(IX,IX);   }
  625. static void bit_ix_ixd(void)    { BIT_M(IX,IXD);  }
  626. static void bit_ixd_rg(void)    { BIT_M(IXD,RG);  }
  627. static void bit_ixd_rgd(void)   { BIT_M(IXD,RGD); }
  628. static void bit_ixd_in(void)    { BIT_M(IXD,IN);  }
  629. static void bit_ixd_ind(void)   { BIT_M(IXD,IND); }
  630. static void bit_ixd_de(void)    { BIT_M(IXD,DE);  }
  631. static void bit_ixd_ded(void)   { BIT_M(IXD,DED); }
  632. static void bit_ixd_ix(void)    { BIT_M(IXD,IX);  }
  633. static void bit_ixd_ixd(void)   { BIT_M(IXD,IXD); }
  634.  
  635. static void bic_rg_rg(void)     { BIC_R(RG,RG);   }
  636. static void bic_rg_rgd(void)    { BIC_M(RG,RGD);  }
  637. static void bic_rg_in(void)     { BIC_M(RG,IN);   }
  638. static void bic_rg_ind(void)    { BIC_M(RG,IND);  }
  639. static void bic_rg_de(void)     { BIC_M(RG,DE);   }
  640. static void bic_rg_ded(void)    { BIC_M(RG,DED);  }
  641. static void bic_rg_ix(void)     { BIC_M(RG,IX);   }
  642. static void bic_rg_ixd(void)    { BIC_M(RG,IXD);  }
  643. static void bic_rgd_rg(void)    { BIC_X(RGD,RG);  }
  644. static void bic_rgd_rgd(void)   { BIC_M(RGD,RGD); }
  645. static void bic_rgd_in(void)    { BIC_M(RGD,IN);  }
  646. static void bic_rgd_ind(void)   { BIC_M(RGD,IND); }
  647. static void bic_rgd_de(void)    { BIC_M(RGD,DE);  }
  648. static void bic_rgd_ded(void)   { BIC_M(RGD,DED); }
  649. static void bic_rgd_ix(void)    { BIC_M(RGD,IX);  }
  650. static void bic_rgd_ixd(void)   { BIC_M(RGD,IXD); }
  651. static void bic_in_rg(void)     { BIC_X(IN,RG);   }
  652. static void bic_in_rgd(void)    { BIC_M(IN,RGD);  }
  653. static void bic_in_in(void)     { BIC_M(IN,IN);   }
  654. static void bic_in_ind(void)    { BIC_M(IN,IND);  }
  655. static void bic_in_de(void)     { BIC_M(IN,DE);   }
  656. static void bic_in_ded(void)    { BIC_M(IN,DED);  }
  657. static void bic_in_ix(void)     { BIC_M(IN,IX);   }
  658. static void bic_in_ixd(void)    { BIC_M(IN,IXD);  }
  659. static void bic_ind_rg(void)    { BIC_X(IND,RG);  }
  660. static void bic_ind_rgd(void)   { BIC_M(IND,RGD); }
  661. static void bic_ind_in(void)    { BIC_M(IND,IN);  }
  662. static void bic_ind_ind(void)   { BIC_M(IND,IND); }
  663. static void bic_ind_de(void)    { BIC_M(IND,DE);  }
  664. static void bic_ind_ded(void)   { BIC_M(IND,DED); }
  665. static void bic_ind_ix(void)    { BIC_M(IND,IX);  }
  666. static void bic_ind_ixd(void)   { BIC_M(IND,IXD); }
  667. static void bic_de_rg(void)     { BIC_X(DE,RG);   }
  668. static void bic_de_rgd(void)    { BIC_M(DE,RGD);  }
  669. static void bic_de_in(void)     { BIC_M(DE,IN);   }
  670. static void bic_de_ind(void)    { BIC_M(DE,IND);  }
  671. static void bic_de_de(void)     { BIC_M(DE,DE);   }
  672. static void bic_de_ded(void)    { BIC_M(DE,DED);  }
  673. static void bic_de_ix(void)     { BIC_M(DE,IX);   }
  674. static void bic_de_ixd(void)    { BIC_M(DE,IXD);  }
  675. static void bic_ded_rg(void)    { BIC_X(DED,RG);  }
  676. static void bic_ded_rgd(void)   { BIC_M(DED,RGD); }
  677. static void bic_ded_in(void)    { BIC_M(DED,IN);  }
  678. static void bic_ded_ind(void)   { BIC_M(DED,IND); }
  679. static void bic_ded_de(void)    { BIC_M(DED,DE);  }
  680. static void bic_ded_ded(void)   { BIC_M(DED,DED); }
  681. static void bic_ded_ix(void)    { BIC_M(DED,IX);  }
  682. static void bic_ded_ixd(void)   { BIC_M(DED,IXD); }
  683. static void bic_ix_rg(void)     { BIC_X(IX,RG);   }
  684. static void bic_ix_rgd(void)    { BIC_M(IX,RGD);  }
  685. static void bic_ix_in(void)     { BIC_M(IX,IN);   }
  686. static void bic_ix_ind(void)    { BIC_M(IX,IND);  }
  687. static void bic_ix_de(void)     { BIC_M(IX,DE);   }
  688. static void bic_ix_ded(void)    { BIC_M(IX,DED);  }
  689. static void bic_ix_ix(void)     { BIC_M(IX,IX);   }
  690. static void bic_ix_ixd(void)    { BIC_M(IX,IXD);  }
  691. static void bic_ixd_rg(void)    { BIC_X(IXD,RG);  }
  692. static void bic_ixd_rgd(void)   { BIC_M(IXD,RGD); }
  693. static void bic_ixd_in(void)    { BIC_M(IXD,IN);  }
  694. static void bic_ixd_ind(void)   { BIC_M(IXD,IND); }
  695. static void bic_ixd_de(void)    { BIC_M(IXD,DE);  }
  696. static void bic_ixd_ded(void)   { BIC_M(IXD,DED); }
  697. static void bic_ixd_ix(void)    { BIC_M(IXD,IX);  }
  698. static void bic_ixd_ixd(void)   { BIC_M(IXD,IXD); }
  699.  
  700. static void bis_rg_rg(void)     { BIS_R(RG,RG);   }
  701. static void bis_rg_rgd(void)    { BIS_M(RG,RGD);  }
  702. static void bis_rg_in(void)     { BIS_M(RG,IN);   }
  703. static void bis_rg_ind(void)    { BIS_M(RG,IND);  }
  704. static void bis_rg_de(void)     { BIS_M(RG,DE);   }
  705. static void bis_rg_ded(void)    { BIS_M(RG,DED);  }
  706. static void bis_rg_ix(void)     { BIS_M(RG,IX);   }
  707. static void bis_rg_ixd(void)    { BIS_M(RG,IXD);  }
  708. static void bis_rgd_rg(void)    { BIS_X(RGD,RG);  }
  709. static void bis_rgd_rgd(void)   { BIS_M(RGD,RGD); }
  710. static void bis_rgd_in(void)    { BIS_M(RGD,IN);  }
  711. static void bis_rgd_ind(void)   { BIS_M(RGD,IND); }
  712. static void bis_rgd_de(void)    { BIS_M(RGD,DE);  }
  713. static void bis_rgd_ded(void)   { BIS_M(RGD,DED); }
  714. static void bis_rgd_ix(void)    { BIS_M(RGD,IX);  }
  715. static void bis_rgd_ixd(void)   { BIS_M(RGD,IXD); }
  716. static void bis_in_rg(void)     { BIS_X(IN,RG);   }
  717. static void bis_in_rgd(void)    { BIS_M(IN,RGD);  }
  718. static void bis_in_in(void)     { BIS_M(IN,IN);   }
  719. static void bis_in_ind(void)    { BIS_M(IN,IND);  }
  720. static void bis_in_de(void)     { BIS_M(IN,DE);   }
  721. static void bis_in_ded(void)    { BIS_M(IN,DED);  }
  722. static void bis_in_ix(void)     { BIS_M(IN,IX);   }
  723. static void bis_in_ixd(void)    { BIS_M(IN,IXD);  }
  724. static void bis_ind_rg(void)    { BIS_X(IND,RG);  }
  725. static void bis_ind_rgd(void)   { BIS_M(IND,RGD); }
  726. static void bis_ind_in(void)    { BIS_M(IND,IN);  }
  727. static void bis_ind_ind(void)   { BIS_M(IND,IND); }
  728. static void bis_ind_de(void)    { BIS_M(IND,DE);  }
  729. static void bis_ind_ded(void)   { BIS_M(IND,DED); }
  730. static void bis_ind_ix(void)    { BIS_M(IND,IX);  }
  731. static void bis_ind_ixd(void)   { BIS_M(IND,IXD); }
  732. static void bis_de_rg(void)     { BIS_X(DE,RG);   }
  733. static void bis_de_rgd(void)    { BIS_M(DE,RGD);  }
  734. static void bis_de_in(void)     { BIS_M(DE,IN);   }
  735. static void bis_de_ind(void)    { BIS_M(DE,IND);  }
  736. static void bis_de_de(void)     { BIS_M(DE,DE);   }
  737. static void bis_de_ded(void)    { BIS_M(DE,DED);  }
  738. static void bis_de_ix(void)     { BIS_M(DE,IX);   }
  739. static void bis_de_ixd(void)    { BIS_M(DE,IXD);  }
  740. static void bis_ded_rg(void)    { BIS_X(DED,RG);  }
  741. static void bis_ded_rgd(void)   { BIS_M(DED,RGD); }
  742. static void bis_ded_in(void)    { BIS_M(DED,IN);  }
  743. static void bis_ded_ind(void)   { BIS_M(DED,IND); }
  744. static void bis_ded_de(void)    { BIS_M(DED,DE);  }
  745. static void bis_ded_ded(void)   { BIS_M(DED,DED); }
  746. static void bis_ded_ix(void)    { BIS_M(DED,IX);  }
  747. static void bis_ded_ixd(void)   { BIS_M(DED,IXD); }
  748. static void bis_ix_rg(void)     { BIS_X(IX,RG);   }
  749. static void bis_ix_rgd(void)    { BIS_M(IX,RGD);  }
  750. static void bis_ix_in(void)     { BIS_M(IX,IN);   }
  751. static void bis_ix_ind(void)    { BIS_M(IX,IND);  }
  752. static void bis_ix_de(void)     { BIS_M(IX,DE);   }
  753. static void bis_ix_ded(void)    { BIS_M(IX,DED);  }
  754. static void bis_ix_ix(void)     { BIS_M(IX,IX);   }
  755. static void bis_ix_ixd(void)    { BIS_M(IX,IXD);  }
  756. static void bis_ixd_rg(void)    { BIS_X(IXD,RG);  }
  757. static void bis_ixd_rgd(void)   { BIS_M(IXD,RGD); }
  758. static void bis_ixd_in(void)    { BIS_M(IXD,IN);  }
  759. static void bis_ixd_ind(void)   { BIS_M(IXD,IND); }
  760. static void bis_ixd_de(void)    { BIS_M(IXD,DE);  }
  761. static void bis_ixd_ded(void)   { BIS_M(IXD,DED); }
  762. static void bis_ixd_ix(void)    { BIS_M(IXD,IX);  }
  763. static void bis_ixd_ixd(void)   { BIS_M(IXD,IXD); }
  764.  
  765. static void add_rg_rg(void)     { ADD_R(RG,RG);   }
  766. static void add_rg_rgd(void)    { ADD_M(RG,RGD);  }
  767. static void add_rg_in(void)     { ADD_M(RG,IN);   }
  768. static void add_rg_ind(void)    { ADD_M(RG,IND);  }
  769. static void add_rg_de(void)     { ADD_M(RG,DE);   }
  770. static void add_rg_ded(void)    { ADD_M(RG,DED);  }
  771. static void add_rg_ix(void)     { ADD_M(RG,IX);   }
  772. static void add_rg_ixd(void)    { ADD_M(RG,IXD);  }
  773. static void add_rgd_rg(void)    { ADD_X(RGD,RG);  }
  774. static void add_rgd_rgd(void)   { ADD_M(RGD,RGD); }
  775. static void add_rgd_in(void)    { ADD_M(RGD,IN);  }
  776. static void add_rgd_ind(void)   { ADD_M(RGD,IND); }
  777. static void add_rgd_de(void)    { ADD_M(RGD,DE);  }
  778. static void add_rgd_ded(void)   { ADD_M(RGD,DED); }
  779. static void add_rgd_ix(void)    { ADD_M(RGD,IX);  }
  780. static void add_rgd_ixd(void)   { ADD_M(RGD,IXD); }
  781. static void add_in_rg(void)     { ADD_X(IN,RG);   }
  782. static void add_in_rgd(void)    { ADD_M(IN,RGD);  }
  783. static void add_in_in(void)     { ADD_M(IN,IN);   }
  784. static void add_in_ind(void)    { ADD_M(IN,IND);  }
  785. static void add_in_de(void)     { ADD_M(IN,DE);   }
  786. static void add_in_ded(void)    { ADD_M(IN,DED);  }
  787. static void add_in_ix(void)     { ADD_M(IN,IX);   }
  788. static void add_in_ixd(void)    { ADD_M(IN,IXD);  }
  789. static void add_ind_rg(void)    { ADD_X(IND,RG);  }
  790. static void add_ind_rgd(void)   { ADD_M(IND,RGD); }
  791. static void add_ind_in(void)    { ADD_M(IND,IN);  }
  792. static void add_ind_ind(void)   { ADD_M(IND,IND); }
  793. static void add_ind_de(void)    { ADD_M(IND,DE);  }
  794. static void add_ind_ded(void)   { ADD_M(IND,DED); }
  795. static void add_ind_ix(void)    { ADD_M(IND,IX);  }
  796. static void add_ind_ixd(void)   { ADD_M(IND,IXD); }
  797. static void add_de_rg(void)     { ADD_X(DE,RG);   }
  798. static void add_de_rgd(void)    { ADD_M(DE,RGD);  }
  799. static void add_de_in(void)     { ADD_M(DE,IN);   }
  800. static void add_de_ind(void)    { ADD_M(DE,IND);  }
  801. static void add_de_de(void)     { ADD_M(DE,DE);   }
  802. static void add_de_ded(void)    { ADD_M(DE,DED);  }
  803. static void add_de_ix(void)     { ADD_M(DE,IX);   }
  804. static void add_de_ixd(void)    { ADD_M(DE,IXD);  }
  805. static void add_ded_rg(void)    { ADD_X(DED,RG);  }
  806. static void add_ded_rgd(void)   { ADD_M(DED,RGD); }
  807. static void add_ded_in(void)    { ADD_M(DED,IN);  }
  808. static void add_ded_ind(void)   { ADD_M(DED,IND); }
  809. static void add_ded_de(void)    { ADD_M(DED,DE);  }
  810. static void add_ded_ded(void)   { ADD_M(DED,DED); }
  811. static void add_ded_ix(void)    { ADD_M(DED,IX);  }
  812. static void add_ded_ixd(void)   { ADD_M(DED,IXD); }
  813. static void add_ix_rg(void)     { ADD_X(IX,RG);   }
  814. static void add_ix_rgd(void)    { ADD_M(IX,RGD);  }
  815. static void add_ix_in(void)     { ADD_M(IX,IN);   }
  816. static void add_ix_ind(void)    { ADD_M(IX,IND);  }
  817. static void add_ix_de(void)     { ADD_M(IX,DE);   }
  818. static void add_ix_ded(void)    { ADD_M(IX,DED);  }
  819. static void add_ix_ix(void)     { ADD_M(IX,IX);   }
  820. static void add_ix_ixd(void)    { ADD_M(IX,IXD);  }
  821. static void add_ixd_rg(void)    { ADD_X(IXD,RG);  }
  822. static void add_ixd_rgd(void)   { ADD_M(IXD,RGD); }
  823. static void add_ixd_in(void)    { ADD_M(IXD,IN);  }
  824. static void add_ixd_ind(void)   { ADD_M(IXD,IND); }
  825. static void add_ixd_de(void)    { ADD_M(IXD,DE);  }
  826. static void add_ixd_ded(void)   { ADD_M(IXD,DED); }
  827. static void add_ixd_ix(void)    { ADD_M(IXD,IX);  }
  828. static void add_ixd_ixd(void)   { ADD_M(IXD,IXD); }
  829.  
  830. static void xor_rg(void)        { XOR_R(RG);  }
  831. static void xor_rgd(void)       { XOR_M(RGD); }
  832. static void xor_in(void)        { XOR_M(IN);  }
  833. static void xor_ind(void)       { XOR_M(IND); }
  834. static void xor_de(void)        { XOR_M(DE);  }
  835. static void xor_ded(void)       { XOR_M(DED); }
  836. static void xor_ix(void)        { XOR_M(IX);  }
  837. static void xor_ixd(void)       { XOR_M(IXD); }
  838.  
  839. static void sob(void)
  840. {
  841.     int sreg, source;
  842.  
  843.     GET_SREG; source = REGD(sreg);
  844.     source -= 1;
  845.     REGW(sreg) = source;
  846.     if (source)
  847.         PC -= 2 * (t11.op & 0x3f);
  848. }
  849.  
  850. static void bpl(void)           { BR(!GET_N); }
  851. static void bmi(void)           { BR( GET_N); }
  852. static void bhi(void)           { BR(!GET_C && !GET_Z); }
  853. static void blos(void)          { BR( GET_C ||  GET_Z); }
  854. static void bvc(void)           { BR(!GET_V); }
  855. static void bvs(void)           { BR( GET_V); }
  856. static void bcc(void)           { BR(!GET_C); }
  857. static void bcs(void)           { BR( GET_C); }
  858.  
  859. static void emt(void)
  860. {
  861.     PUSH(PSW);
  862.     PUSH(PC);
  863.     PC = RWORD(0x18);
  864.     PSW = RWORD(0x1a);
  865.     t11_check_irqs();
  866. }
  867.  
  868. static void trap(void)
  869. {
  870.     PUSH(PSW);
  871.     PUSH(PC);
  872.     PC = RWORD(0x1c);
  873.     PSW = RWORD(0x1e);
  874.     t11_check_irqs();
  875. }
  876.  
  877. static void clrb_rg(void)       { CLRB_R(RG);  }
  878. static void clrb_rgd(void)      { CLRB_M(RGD); }
  879. static void clrb_in(void)       { CLRB_M(IN);  }
  880. static void clrb_ind(void)      { CLRB_M(IND); }
  881. static void clrb_de(void)       { CLRB_M(DE);  }
  882. static void clrb_ded(void)      { CLRB_M(DED); }
  883. static void clrb_ix(void)       { CLRB_M(IX);  }
  884. static void clrb_ixd(void)      { CLRB_M(IXD); }
  885.  
  886. static void comb_rg(void)       { COMB_R(RG);  }
  887. static void comb_rgd(void)      { COMB_M(RGD); }
  888. static void comb_in(void)       { COMB_M(IN);  }
  889. static void comb_ind(void)      { COMB_M(IND); }
  890. static void comb_de(void)       { COMB_M(DE);  }
  891. static void comb_ded(void)      { COMB_M(DED); }
  892. static void comb_ix(void)       { COMB_M(IX);  }
  893. static void comb_ixd(void)      { COMB_M(IXD); }
  894.  
  895. static void incb_rg(void)       { INCB_R(RG);  }
  896. static void incb_rgd(void)      { INCB_M(RGD); }
  897. static void incb_in(void)       { INCB_M(IN);  }
  898. static void incb_ind(void)      { INCB_M(IND); }
  899. static void incb_de(void)       { INCB_M(DE);  }
  900. static void incb_ded(void)      { INCB_M(DED); }
  901. static void incb_ix(void)       { INCB_M(IX);  }
  902. static void incb_ixd(void)      { INCB_M(IXD); }
  903.  
  904. static void decb_rg(void)       { DECB_R(RG);  }
  905. static void decb_rgd(void)      { DECB_M(RGD); }
  906. static void decb_in(void)       { DECB_M(IN);  }
  907. static void decb_ind(void)      { DECB_M(IND); }
  908. static void decb_de(void)       { DECB_M(DE);  }
  909. static void decb_ded(void)      { DECB_M(DED); }
  910. static void decb_ix(void)       { DECB_M(IX);  }
  911. static void decb_ixd(void)      { DECB_M(IXD); }
  912.  
  913. static void negb_rg(void)       { NEGB_R(RG);  }
  914. static void negb_rgd(void)      { NEGB_M(RGD); }
  915. static void negb_in(void)       { NEGB_M(IN);  }
  916. static void negb_ind(void)      { NEGB_M(IND); }
  917. static void negb_de(void)       { NEGB_M(DE);  }
  918. static void negb_ded(void)      { NEGB_M(DED); }
  919. static void negb_ix(void)       { NEGB_M(IX);  }
  920. static void negb_ixd(void)      { NEGB_M(IXD); }
  921.  
  922. static void adcb_rg(void)       { ADCB_R(RG);  }
  923. static void adcb_rgd(void)      { ADCB_M(RGD); }
  924. static void adcb_in(void)       { ADCB_M(IN);  }
  925. static void adcb_ind(void)      { ADCB_M(IND); }
  926. static void adcb_de(void)       { ADCB_M(DE);  }
  927. static void adcb_ded(void)      { ADCB_M(DED); }
  928. static void adcb_ix(void)       { ADCB_M(IX);  }
  929. static void adcb_ixd(void)      { ADCB_M(IXD); }
  930.  
  931. static void sbcb_rg(void)       { SBCB_R(RG);  }
  932. static void sbcb_rgd(void)      { SBCB_M(RGD); }
  933. static void sbcb_in(void)       { SBCB_M(IN);  }
  934. static void sbcb_ind(void)      { SBCB_M(IND); }
  935. static void sbcb_de(void)       { SBCB_M(DE);  }
  936. static void sbcb_ded(void)      { SBCB_M(DED); }
  937. static void sbcb_ix(void)       { SBCB_M(IX);  }
  938. static void sbcb_ixd(void)      { SBCB_M(IXD); }
  939.  
  940. static void tstb_rg(void)       { TSTB_R(RG);  }
  941. static void tstb_rgd(void)      { TSTB_M(RGD); }
  942. static void tstb_in(void)       { TSTB_M(IN);  }
  943. static void tstb_ind(void)      { TSTB_M(IND); }
  944. static void tstb_de(void)       { TSTB_M(DE);  }
  945. static void tstb_ded(void)      { TSTB_M(DED); }
  946. static void tstb_ix(void)       { TSTB_M(IX);  }
  947. static void tstb_ixd(void)      { TSTB_M(IXD); }
  948.  
  949. static void rorb_rg(void)       { RORB_R(RG);  }
  950. static void rorb_rgd(void)      { RORB_M(RGD); }
  951. static void rorb_in(void)       { RORB_M(IN);  }
  952. static void rorb_ind(void)      { RORB_M(IND); }
  953. static void rorb_de(void)       { RORB_M(DE);  }
  954. static void rorb_ded(void)      { RORB_M(DED); }
  955. static void rorb_ix(void)       { RORB_M(IX);  }
  956. static void rorb_ixd(void)      { RORB_M(IXD); }
  957.  
  958. static void rolb_rg(void)       { ROLB_R(RG);  }
  959. static void rolb_rgd(void)      { ROLB_M(RGD); }
  960. static void rolb_in(void)       { ROLB_M(IN);  }
  961. static void rolb_ind(void)      { ROLB_M(IND); }
  962. static void rolb_de(void)       { ROLB_M(DE);  }
  963. static void rolb_ded(void)      { ROLB_M(DED); }
  964. static void rolb_ix(void)       { ROLB_M(IX);  }
  965. static void rolb_ixd(void)      { ROLB_M(IXD); }
  966.  
  967. static void asrb_rg(void)       { ASRB_R(RG);  }
  968. static void asrb_rgd(void)      { ASRB_M(RGD); }
  969. static void asrb_in(void)       { ASRB_M(IN);  }
  970. static void asrb_ind(void)      { ASRB_M(IND); }
  971. static void asrb_de(void)       { ASRB_M(DE);  }
  972. static void asrb_ded(void)      { ASRB_M(DED); }
  973. static void asrb_ix(void)       { ASRB_M(IX);  }
  974. static void asrb_ixd(void)      { ASRB_M(IXD); }
  975.  
  976. static void aslb_rg(void)       { ASLB_R(RG);  }
  977. static void aslb_rgd(void)      { ASLB_M(RGD); }
  978. static void aslb_in(void)       { ASLB_M(IN);  }
  979. static void aslb_ind(void)      { ASLB_M(IND); }
  980. static void aslb_de(void)       { ASLB_M(DE);  }
  981. static void aslb_ded(void)      { ASLB_M(DED); }
  982. static void aslb_ix(void)       { ASLB_M(IX);  }
  983. static void aslb_ixd(void)      { ASLB_M(IXD); }
  984.  
  985. static void mtps_rg(void)       { MTPS_R(RG);  }
  986. static void mtps_rgd(void)      { MTPS_M(RGD); }
  987. static void mtps_in(void)       { MTPS_M(IN);  }
  988. static void mtps_ind(void)      { MTPS_M(IND); }
  989. static void mtps_de(void)       { MTPS_M(DE);  }
  990. static void mtps_ded(void)      { MTPS_M(DED); }
  991. static void mtps_ix(void)       { MTPS_M(IX);  }
  992. static void mtps_ixd(void)      { MTPS_M(IXD); }
  993.  
  994. static void mfps_rg(void)       { MFPS_R(RG);  }
  995. static void mfps_rgd(void)      { MFPS_M(RGD); }
  996. static void mfps_in(void)       { MFPS_M(IN);  }
  997. static void mfps_ind(void)      { MFPS_M(IND); }
  998. static void mfps_de(void)       { MFPS_M(DE);  }
  999. static void mfps_ded(void)      { MFPS_M(DED); }
  1000. static void mfps_ix(void)       { MFPS_M(IX);  }
  1001. static void mfps_ixd(void)      { MFPS_M(IXD); }
  1002.  
  1003. static void movb_rg_rg(void)     { MOVB_R(RG,RG);   }
  1004. static void movb_rg_rgd(void)    { MOVB_M(RG,RGD);  }
  1005. static void movb_rg_in(void)     { MOVB_M(RG,IN);   }
  1006. static void movb_rg_ind(void)    { MOVB_M(RG,IND);  }
  1007. static void movb_rg_de(void)     { MOVB_M(RG,DE);   }
  1008. static void movb_rg_ded(void)    { MOVB_M(RG,DED);  }
  1009. static void movb_rg_ix(void)     { MOVB_M(RG,IX);   }
  1010. static void movb_rg_ixd(void)    { MOVB_M(RG,IXD);  }
  1011. static void movb_rgd_rg(void)    { MOVB_X(RGD,RG);  }
  1012. static void movb_rgd_rgd(void)   { MOVB_M(RGD,RGD); }
  1013. static void movb_rgd_in(void)    { MOVB_M(RGD,IN);  }
  1014. static void movb_rgd_ind(void)   { MOVB_M(RGD,IND); }
  1015. static void movb_rgd_de(void)    { MOVB_M(RGD,DE);  }
  1016. static void movb_rgd_ded(void)   { MOVB_M(RGD,DED); }
  1017. static void movb_rgd_ix(void)    { MOVB_M(RGD,IX);  }
  1018. static void movb_rgd_ixd(void)   { MOVB_M(RGD,IXD); }
  1019. static void movb_in_rg(void)     { MOVB_X(IN,RG);   }
  1020. static void movb_in_rgd(void)    { MOVB_M(IN,RGD);  }
  1021. static void movb_in_in(void)     { MOVB_M(IN,IN);   }
  1022. static void movb_in_ind(void)    { MOVB_M(IN,IND);  }
  1023. static void movb_in_de(void)     { MOVB_M(IN,DE);   }
  1024. static void movb_in_ded(void)    { MOVB_M(IN,DED);  }
  1025. static void movb_in_ix(void)     { MOVB_M(IN,IX);   }
  1026. static void movb_in_ixd(void)    { MOVB_M(IN,IXD);  }
  1027. static void movb_ind_rg(void)    { MOVB_X(IND,RG);  }
  1028. static void movb_ind_rgd(void)   { MOVB_M(IND,RGD); }
  1029. static void movb_ind_in(void)    { MOVB_M(IND,IN);  }
  1030. static void movb_ind_ind(void)   { MOVB_M(IND,IND); }
  1031. static void movb_ind_de(void)    { MOVB_M(IND,DE);  }
  1032. static void movb_ind_ded(void)   { MOVB_M(IND,DED); }
  1033. static void movb_ind_ix(void)    { MOVB_M(IND,IX);  }
  1034. static void movb_ind_ixd(void)   { MOVB_M(IND,IXD); }
  1035. static void movb_de_rg(void)     { MOVB_X(DE,RG);   }
  1036. static void movb_de_rgd(void)    { MOVB_M(DE,RGD);  }
  1037. static void movb_de_in(void)     { MOVB_M(DE,IN);   }
  1038. static void movb_de_ind(void)    { MOVB_M(DE,IND);  }
  1039. static void movb_de_de(void)     { MOVB_M(DE,DE);   }
  1040. static void movb_de_ded(void)    { MOVB_M(DE,DED);  }
  1041. static void movb_de_ix(void)     { MOVB_M(DE,IX);   }
  1042. static void movb_de_ixd(void)    { MOVB_M(DE,IXD);  }
  1043. static void movb_ded_rg(void)    { MOVB_X(DED,RG);  }
  1044. static void movb_ded_rgd(void)   { MOVB_M(DED,RGD); }
  1045. static void movb_ded_in(void)    { MOVB_M(DED,IN);  }
  1046. static void movb_ded_ind(void)   { MOVB_M(DED,IND); }
  1047. static void movb_ded_de(void)    { MOVB_M(DED,DE);  }
  1048. static void movb_ded_ded(void)   { MOVB_M(DED,DED); }
  1049. static void movb_ded_ix(void)    { MOVB_M(DED,IX);  }
  1050. static void movb_ded_ixd(void)   { MOVB_M(DED,IXD); }
  1051. static void movb_ix_rg(void)     { MOVB_X(IX,RG);   }
  1052. static void movb_ix_rgd(void)    { MOVB_M(IX,RGD);  }
  1053. static void movb_ix_in(void)     { MOVB_M(IX,IN);   }
  1054. static void movb_ix_ind(void)    { MOVB_M(IX,IND);  }
  1055. static void movb_ix_de(void)     { MOVB_M(IX,DE);   }
  1056. static void movb_ix_ded(void)    { MOVB_M(IX,DED);  }
  1057. static void movb_ix_ix(void)     { MOVB_M(IX,IX);   }
  1058. static void movb_ix_ixd(void)    { MOVB_M(IX,IXD);  }
  1059. static void movb_ixd_rg(void)    { MOVB_X(IXD,RG);  }
  1060. static void movb_ixd_rgd(void)   { MOVB_M(IXD,RGD); }
  1061. static void movb_ixd_in(void)    { MOVB_M(IXD,IN);  }
  1062. static void movb_ixd_ind(void)   { MOVB_M(IXD,IND); }
  1063. static void movb_ixd_de(void)    { MOVB_M(IXD,DE);  }
  1064. static void movb_ixd_ded(void)   { MOVB_M(IXD,DED); }
  1065. static void movb_ixd_ix(void)    { MOVB_M(IXD,IX);  }
  1066. static void movb_ixd_ixd(void)   { MOVB_M(IXD,IXD); }
  1067.  
  1068. static void cmpb_rg_rg(void)     { CMPB_R(RG,RG);   }
  1069. static void cmpb_rg_rgd(void)    { CMPB_M(RG,RGD);  }
  1070. static void cmpb_rg_in(void)     { CMPB_M(RG,IN);   }
  1071. static void cmpb_rg_ind(void)    { CMPB_M(RG,IND);  }
  1072. static void cmpb_rg_de(void)     { CMPB_M(RG,DE);   }
  1073. static void cmpb_rg_ded(void)    { CMPB_M(RG,DED);  }
  1074. static void cmpb_rg_ix(void)     { CMPB_M(RG,IX);   }
  1075. static void cmpb_rg_ixd(void)    { CMPB_M(RG,IXD);  }
  1076. static void cmpb_rgd_rg(void)    { CMPB_M(RGD,RG);  }
  1077. static void cmpb_rgd_rgd(void)   { CMPB_M(RGD,RGD); }
  1078. static void cmpb_rgd_in(void)    { CMPB_M(RGD,IN);  }
  1079. static void cmpb_rgd_ind(void)   { CMPB_M(RGD,IND); }
  1080. static void cmpb_rgd_de(void)    { CMPB_M(RGD,DE);  }
  1081. static void cmpb_rgd_ded(void)   { CMPB_M(RGD,DED); }
  1082. static void cmpb_rgd_ix(void)    { CMPB_M(RGD,IX);  }
  1083. static void cmpb_rgd_ixd(void)   { CMPB_M(RGD,IXD); }
  1084. static void cmpb_in_rg(void)     { CMPB_M(IN,RG);   }
  1085. static void cmpb_in_rgd(void)    { CMPB_M(IN,RGD);  }
  1086. static void cmpb_in_in(void)     { CMPB_M(IN,IN);   }
  1087. static void cmpb_in_ind(void)    { CMPB_M(IN,IND);  }
  1088. static void cmpb_in_de(void)     { CMPB_M(IN,DE);   }
  1089. static void cmpb_in_ded(void)    { CMPB_M(IN,DED);  }
  1090. static void cmpb_in_ix(void)     { CMPB_M(IN,IX);   }
  1091. static void cmpb_in_ixd(void)    { CMPB_M(IN,IXD);  }
  1092. static void cmpb_ind_rg(void)    { CMPB_M(IND,RG);  }
  1093. static void cmpb_ind_rgd(void)   { CMPB_M(IND,RGD); }
  1094. static void cmpb_ind_in(void)    { CMPB_M(IND,IN);  }
  1095. static void cmpb_ind_ind(void)   { CMPB_M(IND,IND); }
  1096. static void cmpb_ind_de(void)    { CMPB_M(IND,DE);  }
  1097. static void cmpb_ind_ded(void)   { CMPB_M(IND,DED); }
  1098. static void cmpb_ind_ix(void)    { CMPB_M(IND,IX);  }
  1099. static void cmpb_ind_ixd(void)   { CMPB_M(IND,IXD); }
  1100. static void cmpb_de_rg(void)     { CMPB_M(DE,RG);   }
  1101. static void cmpb_de_rgd(void)    { CMPB_M(DE,RGD);  }
  1102. static void cmpb_de_in(void)     { CMPB_M(DE,IN);   }
  1103. static void cmpb_de_ind(void)    { CMPB_M(DE,IND);  }
  1104. static void cmpb_de_de(void)     { CMPB_M(DE,DE);   }
  1105. static void cmpb_de_ded(void)    { CMPB_M(DE,DED);  }
  1106. static void cmpb_de_ix(void)     { CMPB_M(DE,IX);   }
  1107. static void cmpb_de_ixd(void)    { CMPB_M(DE,IXD);  }
  1108. static void cmpb_ded_rg(void)    { CMPB_M(DED,RG);  }
  1109. static void cmpb_ded_rgd(void)   { CMPB_M(DED,RGD); }
  1110. static void cmpb_ded_in(void)    { CMPB_M(DED,IN);  }
  1111. static void cmpb_ded_ind(void)   { CMPB_M(DED,IND); }
  1112. static void cmpb_ded_de(void)    { CMPB_M(DED,DE);  }
  1113. static void cmpb_ded_ded(void)   { CMPB_M(DED,DED); }
  1114. static void cmpb_ded_ix(void)    { CMPB_M(DED,IX);  }
  1115. static void cmpb_ded_ixd(void)   { CMPB_M(DED,IXD); }
  1116. static void cmpb_ix_rg(void)     { CMPB_M(IX,RG);   }
  1117. static void cmpb_ix_rgd(void)    { CMPB_M(IX,RGD);  }
  1118. static void cmpb_ix_in(void)     { CMPB_M(IX,IN);   }
  1119. static void cmpb_ix_ind(void)    { CMPB_M(IX,IND);  }
  1120. static void cmpb_ix_de(void)     { CMPB_M(IX,DE);   }
  1121. static void cmpb_ix_ded(void)    { CMPB_M(IX,DED);  }
  1122. static void cmpb_ix_ix(void)     { CMPB_M(IX,IX);   }
  1123. static void cmpb_ix_ixd(void)    { CMPB_M(IX,IXD);  }
  1124. static void cmpb_ixd_rg(void)    { CMPB_M(IXD,RG);  }
  1125. static void cmpb_ixd_rgd(void)   { CMPB_M(IXD,RGD); }
  1126. static void cmpb_ixd_in(void)    { CMPB_M(IXD,IN);  }
  1127. static void cmpb_ixd_ind(void)   { CMPB_M(IXD,IND); }
  1128. static void cmpb_ixd_de(void)    { CMPB_M(IXD,DE);  }
  1129. static void cmpb_ixd_ded(void)   { CMPB_M(IXD,DED); }
  1130. static void cmpb_ixd_ix(void)    { CMPB_M(IXD,IX);  }
  1131. static void cmpb_ixd_ixd(void)   { CMPB_M(IXD,IXD); }
  1132.  
  1133. static void bitb_rg_rg(void)     { BITB_R(RG,RG);   }
  1134. static void bitb_rg_rgd(void)    { BITB_M(RG,RGD);  }
  1135. static void bitb_rg_in(void)     { BITB_M(RG,IN);   }
  1136. static void bitb_rg_ind(void)    { BITB_M(RG,IND);  }
  1137. static void bitb_rg_de(void)     { BITB_M(RG,DE);   }
  1138. static void bitb_rg_ded(void)    { BITB_M(RG,DED);  }
  1139. static void bitb_rg_ix(void)     { BITB_M(RG,IX);   }
  1140. static void bitb_rg_ixd(void)    { BITB_M(RG,IXD);  }
  1141. static void bitb_rgd_rg(void)    { BITB_M(RGD,RG);  }
  1142. static void bitb_rgd_rgd(void)   { BITB_M(RGD,RGD); }
  1143. static void bitb_rgd_in(void)    { BITB_M(RGD,IN);  }
  1144. static void bitb_rgd_ind(void)   { BITB_M(RGD,IND); }
  1145. static void bitb_rgd_de(void)    { BITB_M(RGD,DE);  }
  1146. static void bitb_rgd_ded(void)   { BITB_M(RGD,DED); }
  1147. static void bitb_rgd_ix(void)    { BITB_M(RGD,IX);  }
  1148. static void bitb_rgd_ixd(void)   { BITB_M(RGD,IXD); }
  1149. static void bitb_in_rg(void)     { BITB_M(IN,RG);   }
  1150. static void bitb_in_rgd(void)    { BITB_M(IN,RGD);  }
  1151. static void bitb_in_in(void)     { BITB_M(IN,IN);   }
  1152. static void bitb_in_ind(void)    { BITB_M(IN,IND);  }
  1153. static void bitb_in_de(void)     { BITB_M(IN,DE);   }
  1154. static void bitb_in_ded(void)    { BITB_M(IN,DED);  }
  1155. static void bitb_in_ix(void)     { BITB_M(IN,IX);   }
  1156. static void bitb_in_ixd(void)    { BITB_M(IN,IXD);  }
  1157. static void bitb_ind_rg(void)    { BITB_M(IND,RG);  }
  1158. static void bitb_ind_rgd(void)   { BITB_M(IND,RGD); }
  1159. static void bitb_ind_in(void)    { BITB_M(IND,IN);  }
  1160. static void bitb_ind_ind(void)   { BITB_M(IND,IND); }
  1161. static void bitb_ind_de(void)    { BITB_M(IND,DE);  }
  1162. static void bitb_ind_ded(void)   { BITB_M(IND,DED); }
  1163. static void bitb_ind_ix(void)    { BITB_M(IND,IX);  }
  1164. static void bitb_ind_ixd(void)   { BITB_M(IND,IXD); }
  1165. static void bitb_de_rg(void)     { BITB_M(DE,RG);   }
  1166. static void bitb_de_rgd(void)    { BITB_M(DE,RGD);  }
  1167. static void bitb_de_in(void)     { BITB_M(DE,IN);   }
  1168. static void bitb_de_ind(void)    { BITB_M(DE,IND);  }
  1169. static void bitb_de_de(void)     { BITB_M(DE,DE);   }
  1170. static void bitb_de_ded(void)    { BITB_M(DE,DED);  }
  1171. static void bitb_de_ix(void)     { BITB_M(DE,IX);   }
  1172. static void bitb_de_ixd(void)    { BITB_M(DE,IXD);  }
  1173. static void bitb_ded_rg(void)    { BITB_M(DED,RG);  }
  1174. static void bitb_ded_rgd(void)   { BITB_M(DED,RGD); }
  1175. static void bitb_ded_in(void)    { BITB_M(DED,IN);  }
  1176. static void bitb_ded_ind(void)   { BITB_M(DED,IND); }
  1177. static void bitb_ded_de(void)    { BITB_M(DED,DE);  }
  1178. static void bitb_ded_ded(void)   { BITB_M(DED,DED); }
  1179. static void bitb_ded_ix(void)    { BITB_M(DED,IX);  }
  1180. static void bitb_ded_ixd(void)   { BITB_M(DED,IXD); }
  1181. static void bitb_ix_rg(void)     { BITB_M(IX,RG);   }
  1182. static void bitb_ix_rgd(void)    { BITB_M(IX,RGD);  }
  1183. static void bitb_ix_in(void)     { BITB_M(IX,IN);   }
  1184. static void bitb_ix_ind(void)    { BITB_M(IX,IND);  }
  1185. static void bitb_ix_de(void)     { BITB_M(IX,DE);   }
  1186. static void bitb_ix_ded(void)    { BITB_M(IX,DED);  }
  1187. static void bitb_ix_ix(void)     { BITB_M(IX,IX);   }
  1188. static void bitb_ix_ixd(void)    { BITB_M(IX,IXD);  }
  1189. static void bitb_ixd_rg(void)    { BITB_M(IXD,RG);  }
  1190. static void bitb_ixd_rgd(void)   { BITB_M(IXD,RGD); }
  1191. static void bitb_ixd_in(void)    { BITB_M(IXD,IN);  }
  1192. static void bitb_ixd_ind(void)   { BITB_M(IXD,IND); }
  1193. static void bitb_ixd_de(void)    { BITB_M(IXD,DE);  }
  1194. static void bitb_ixd_ded(void)   { BITB_M(IXD,DED); }
  1195. static void bitb_ixd_ix(void)    { BITB_M(IXD,IX);  }
  1196. static void bitb_ixd_ixd(void)   { BITB_M(IXD,IXD); }
  1197.  
  1198. static void bicb_rg_rg(void)     { BICB_R(RG,RG);   }
  1199. static void bicb_rg_rgd(void)    { BICB_M(RG,RGD);  }
  1200. static void bicb_rg_in(void)     { BICB_M(RG,IN);   }
  1201. static void bicb_rg_ind(void)    { BICB_M(RG,IND);  }
  1202. static void bicb_rg_de(void)     { BICB_M(RG,DE);   }
  1203. static void bicb_rg_ded(void)    { BICB_M(RG,DED);  }
  1204. static void bicb_rg_ix(void)     { BICB_M(RG,IX);   }
  1205. static void bicb_rg_ixd(void)    { BICB_M(RG,IXD);  }
  1206. static void bicb_rgd_rg(void)    { BICB_X(RGD,RG);  }
  1207. static void bicb_rgd_rgd(void)   { BICB_M(RGD,RGD); }
  1208. static void bicb_rgd_in(void)    { BICB_M(RGD,IN);  }
  1209. static void bicb_rgd_ind(void)   { BICB_M(RGD,IND); }
  1210. static void bicb_rgd_de(void)    { BICB_M(RGD,DE);  }
  1211. static void bicb_rgd_ded(void)   { BICB_M(RGD,DED); }
  1212. static void bicb_rgd_ix(void)    { BICB_M(RGD,IX);  }
  1213. static void bicb_rgd_ixd(void)   { BICB_M(RGD,IXD); }
  1214. static void bicb_in_rg(void)     { BICB_X(IN,RG);   }
  1215. static void bicb_in_rgd(void)    { BICB_M(IN,RGD);  }
  1216. static void bicb_in_in(void)     { BICB_M(IN,IN);   }
  1217. static void bicb_in_ind(void)    { BICB_M(IN,IND);  }
  1218. static void bicb_in_de(void)     { BICB_M(IN,DE);   }
  1219. static void bicb_in_ded(void)    { BICB_M(IN,DED);  }
  1220. static void bicb_in_ix(void)     { BICB_M(IN,IX);   }
  1221. static void bicb_in_ixd(void)    { BICB_M(IN,IXD);  }
  1222. static void bicb_ind_rg(void)    { BICB_X(IND,RG);  }
  1223. static void bicb_ind_rgd(void)   { BICB_M(IND,RGD); }
  1224. static void bicb_ind_in(void)    { BICB_M(IND,IN);  }
  1225. static void bicb_ind_ind(void)   { BICB_M(IND,IND); }
  1226. static void bicb_ind_de(void)    { BICB_M(IND,DE);  }
  1227. static void bicb_ind_ded(void)   { BICB_M(IND,DED); }
  1228. static void bicb_ind_ix(void)    { BICB_M(IND,IX);  }
  1229. static void bicb_ind_ixd(void)   { BICB_M(IND,IXD); }
  1230. static void bicb_de_rg(void)     { BICB_X(DE,RG);   }
  1231. static void bicb_de_rgd(void)    { BICB_M(DE,RGD);  }
  1232. static void bicb_de_in(void)     { BICB_M(DE,IN);   }
  1233. static void bicb_de_ind(void)    { BICB_M(DE,IND);  }
  1234. static void bicb_de_de(void)     { BICB_M(DE,DE);   }
  1235. static void bicb_de_ded(void)    { BICB_M(DE,DED);  }
  1236. static void bicb_de_ix(void)     { BICB_M(DE,IX);   }
  1237. static void bicb_de_ixd(void)    { BICB_M(DE,IXD);  }
  1238. static void bicb_ded_rg(void)    { BICB_X(DED,RG);  }
  1239. static void bicb_ded_rgd(void)   { BICB_M(DED,RGD); }
  1240. static void bicb_ded_in(void)    { BICB_M(DED,IN);  }
  1241. static void bicb_ded_ind(void)   { BICB_M(DED,IND); }
  1242. static void bicb_ded_de(void)    { BICB_M(DED,DE);  }
  1243. static void bicb_ded_ded(void)   { BICB_M(DED,DED); }
  1244. static void bicb_ded_ix(void)    { BICB_M(DED,IX);  }
  1245. static void bicb_ded_ixd(void)   { BICB_M(DED,IXD); }
  1246. static void bicb_ix_rg(void)     { BICB_X(IX,RG);   }
  1247. static void bicb_ix_rgd(void)    { BICB_M(IX,RGD);  }
  1248. static void bicb_ix_in(void)     { BICB_M(IX,IN);   }
  1249. static void bicb_ix_ind(void)    { BICB_M(IX,IND);  }
  1250. static void bicb_ix_de(void)     { BICB_M(IX,DE);   }
  1251. static void bicb_ix_ded(void)    { BICB_M(IX,DED);  }
  1252. static void bicb_ix_ix(void)     { BICB_M(IX,IX);   }
  1253. static void bicb_ix_ixd(void)    { BICB_M(IX,IXD);  }
  1254. static void bicb_ixd_rg(void)    { BICB_X(IXD,RG);  }
  1255. static void bicb_ixd_rgd(void)   { BICB_M(IXD,RGD); }
  1256. static void bicb_ixd_in(void)    { BICB_M(IXD,IN);  }
  1257. static void bicb_ixd_ind(void)   { BICB_M(IXD,IND); }
  1258. static void bicb_ixd_de(void)    { BICB_M(IXD,DE);  }
  1259. static void bicb_ixd_ded(void)   { BICB_M(IXD,DED); }
  1260. static void bicb_ixd_ix(void)    { BICB_M(IXD,IX);  }
  1261. static void bicb_ixd_ixd(void)   { BICB_M(IXD,IXD); }
  1262.  
  1263. static void bisb_rg_rg(void)     { BISB_R(RG,RG);   }
  1264. static void bisb_rg_rgd(void)    { BISB_M(RG,RGD);  }
  1265. static void bisb_rg_in(void)     { BISB_M(RG,IN);   }
  1266. static void bisb_rg_ind(void)    { BISB_M(RG,IND);  }
  1267. static void bisb_rg_de(void)     { BISB_M(RG,DE);   }
  1268. static void bisb_rg_ded(void)    { BISB_M(RG,DED);  }
  1269. static void bisb_rg_ix(void)     { BISB_M(RG,IX);   }
  1270. static void bisb_rg_ixd(void)    { BISB_M(RG,IXD);  }
  1271. static void bisb_rgd_rg(void)    { BISB_X(RGD,RG);  }
  1272. static void bisb_rgd_rgd(void)   { BISB_M(RGD,RGD); }
  1273. static void bisb_rgd_in(void)    { BISB_M(RGD,IN);  }
  1274. static void bisb_rgd_ind(void)   { BISB_M(RGD,IND); }
  1275. static void bisb_rgd_de(void)    { BISB_M(RGD,DE);  }
  1276. static void bisb_rgd_ded(void)   { BISB_M(RGD,DED); }
  1277. static void bisb_rgd_ix(void)    { BISB_M(RGD,IX);  }
  1278. static void bisb_rgd_ixd(void)   { BISB_M(RGD,IXD); }
  1279. static void bisb_in_rg(void)     { BISB_X(IN,RG);   }
  1280. static void bisb_in_rgd(void)    { BISB_M(IN,RGD);  }
  1281. static void bisb_in_in(void)     { BISB_M(IN,IN);   }
  1282. static void bisb_in_ind(void)    { BISB_M(IN,IND);  }
  1283. static void bisb_in_de(void)     { BISB_M(IN,DE);   }
  1284. static void bisb_in_ded(void)    { BISB_M(IN,DED);  }
  1285. static void bisb_in_ix(void)     { BISB_M(IN,IX);   }
  1286. static void bisb_in_ixd(void)    { BISB_M(IN,IXD);  }
  1287. static void bisb_ind_rg(void)    { BISB_X(IND,RG);  }
  1288. static void bisb_ind_rgd(void)   { BISB_M(IND,RGD); }
  1289. static void bisb_ind_in(void)    { BISB_M(IND,IN);  }
  1290. static void bisb_ind_ind(void)   { BISB_M(IND,IND); }
  1291. static void bisb_ind_de(void)    { BISB_M(IND,DE);  }
  1292. static void bisb_ind_ded(void)   { BISB_M(IND,DED); }
  1293. static void bisb_ind_ix(void)    { BISB_M(IND,IX);  }
  1294. static void bisb_ind_ixd(void)   { BISB_M(IND,IXD); }
  1295. static void bisb_de_rg(void)     { BISB_X(DE,RG);   }
  1296. static void bisb_de_rgd(void)    { BISB_M(DE,RGD);  }
  1297. static void bisb_de_in(void)     { BISB_M(DE,IN);   }
  1298. static void bisb_de_ind(void)    { BISB_M(DE,IND);  }
  1299. static void bisb_de_de(void)     { BISB_M(DE,DE);   }
  1300. static void bisb_de_ded(void)    { BISB_M(DE,DED);  }
  1301. static void bisb_de_ix(void)     { BISB_M(DE,IX);   }
  1302. static void bisb_de_ixd(void)    { BISB_M(DE,IXD);  }
  1303. static void bisb_ded_rg(void)    { BISB_X(DED,RG);  }
  1304. static void bisb_ded_rgd(void)   { BISB_M(DED,RGD); }
  1305. static void bisb_ded_in(void)    { BISB_M(DED,IN);  }
  1306. static void bisb_ded_ind(void)   { BISB_M(DED,IND); }
  1307. static void bisb_ded_de(void)    { BISB_M(DED,DE);  }
  1308. static void bisb_ded_ded(void)   { BISB_M(DED,DED); }
  1309. static void bisb_ded_ix(void)    { BISB_M(DED,IX);  }
  1310. static void bisb_ded_ixd(void)   { BISB_M(DED,IXD); }
  1311. static void bisb_ix_rg(void)     { BISB_X(IX,RG);   }
  1312. static void bisb_ix_rgd(void)    { BISB_M(IX,RGD);  }
  1313. static void bisb_ix_in(void)     { BISB_M(IX,IN);   }
  1314. static void bisb_ix_ind(void)    { BISB_M(IX,IND);  }
  1315. static void bisb_ix_de(void)     { BISB_M(IX,DE);   }
  1316. static void bisb_ix_ded(void)    { BISB_M(IX,DED);  }
  1317. static void bisb_ix_ix(void)     { BISB_M(IX,IX);   }
  1318. static void bisb_ix_ixd(void)    { BISB_M(IX,IXD);  }
  1319. static void bisb_ixd_rg(void)    { BISB_X(IXD,RG);  }
  1320. static void bisb_ixd_rgd(void)   { BISB_M(IXD,RGD); }
  1321. static void bisb_ixd_in(void)    { BISB_M(IXD,IN);  }
  1322. static void bisb_ixd_ind(void)   { BISB_M(IXD,IND); }
  1323. static void bisb_ixd_de(void)    { BISB_M(IXD,DE);  }
  1324. static void bisb_ixd_ded(void)   { BISB_M(IXD,DED); }
  1325. static void bisb_ixd_ix(void)    { BISB_M(IXD,IX);  }
  1326. static void bisb_ixd_ixd(void)   { BISB_M(IXD,IXD); }
  1327.  
  1328. static void sub_rg_rg(void)     { SUB_R(RG,RG);   }
  1329. static void sub_rg_rgd(void)    { SUB_M(RG,RGD);  }
  1330. static void sub_rg_in(void)     { SUB_M(RG,IN);   }
  1331. static void sub_rg_ind(void)    { SUB_M(RG,IND);  }
  1332. static void sub_rg_de(void)     { SUB_M(RG,DE);   }
  1333. static void sub_rg_ded(void)    { SUB_M(RG,DED);  }
  1334. static void sub_rg_ix(void)     { SUB_M(RG,IX);   }
  1335. static void sub_rg_ixd(void)    { SUB_M(RG,IXD);  }
  1336. static void sub_rgd_rg(void)    { SUB_X(RGD,RG);  }
  1337. static void sub_rgd_rgd(void)   { SUB_M(RGD,RGD); }
  1338. static void sub_rgd_in(void)    { SUB_M(RGD,IN);  }
  1339. static void sub_rgd_ind(void)   { SUB_M(RGD,IND); }
  1340. static void sub_rgd_de(void)    { SUB_M(RGD,DE);  }
  1341. static void sub_rgd_ded(void)   { SUB_M(RGD,DED); }
  1342. static void sub_rgd_ix(void)    { SUB_M(RGD,IX);  }
  1343. static void sub_rgd_ixd(void)   { SUB_M(RGD,IXD); }
  1344. static void sub_in_rg(void)     { SUB_X(IN,RG);   }
  1345. static void sub_in_rgd(void)    { SUB_M(IN,RGD);  }
  1346. static void sub_in_in(void)     { SUB_M(IN,IN);   }
  1347. static void sub_in_ind(void)    { SUB_M(IN,IND);  }
  1348. static void sub_in_de(void)     { SUB_M(IN,DE);   }
  1349. static void sub_in_ded(void)    { SUB_M(IN,DED);  }
  1350. static void sub_in_ix(void)     { SUB_M(IN,IX);   }
  1351. static void sub_in_ixd(void)    { SUB_M(IN,IXD);  }
  1352. static void sub_ind_rg(void)    { SUB_X(IND,RG);  }
  1353. static void sub_ind_rgd(void)   { SUB_M(IND,RGD); }
  1354. static void sub_ind_in(void)    { SUB_M(IND,IN);  }
  1355. static void sub_ind_ind(void)   { SUB_M(IND,IND); }
  1356. static void sub_ind_de(void)    { SUB_M(IND,DE);  }
  1357. static void sub_ind_ded(void)   { SUB_M(IND,DED); }
  1358. static void sub_ind_ix(void)    { SUB_M(IND,IX);  }
  1359. static void sub_ind_ixd(void)   { SUB_M(IND,IXD); }
  1360. static void sub_de_rg(void)     { SUB_X(DE,RG);   }
  1361. static void sub_de_rgd(void)    { SUB_M(DE,RGD);  }
  1362. static void sub_de_in(void)     { SUB_M(DE,IN);   }
  1363. static void sub_de_ind(void)    { SUB_M(DE,IND);  }
  1364. static void sub_de_de(void)     { SUB_M(DE,DE);   }
  1365. static void sub_de_ded(void)    { SUB_M(DE,DED);  }
  1366. static void sub_de_ix(void)     { SUB_M(DE,IX);   }
  1367. static void sub_de_ixd(void)    { SUB_M(DE,IXD);  }
  1368. static void sub_ded_rg(void)    { SUB_X(DED,RG);  }
  1369. static void sub_ded_rgd(void)   { SUB_M(DED,RGD); }
  1370. static void sub_ded_in(void)    { SUB_M(DED,IN);  }
  1371. static void sub_ded_ind(void)   { SUB_M(DED,IND); }
  1372. static void sub_ded_de(void)    { SUB_M(DED,DE);  }
  1373. static void sub_ded_ded(void)   { SUB_M(DED,DED); }
  1374. static void sub_ded_ix(void)    { SUB_M(DED,IX);  }
  1375. static void sub_ded_ixd(void)   { SUB_M(DED,IXD); }
  1376. static void sub_ix_rg(void)     { SUB_X(IX,RG);   }
  1377. static void sub_ix_rgd(void)    { SUB_M(IX,RGD);  }
  1378. static void sub_ix_in(void)     { SUB_M(IX,IN);   }
  1379. static void sub_ix_ind(void)    { SUB_M(IX,IND);  }
  1380. static void sub_ix_de(void)     { SUB_M(IX,DE);   }
  1381. static void sub_ix_ded(void)    { SUB_M(IX,DED);  }
  1382. static void sub_ix_ix(void)     { SUB_M(IX,IX);   }
  1383. static void sub_ix_ixd(void)    { SUB_M(IX,IXD);  }
  1384. static void sub_ixd_rg(void)    { SUB_X(IXD,RG);  }
  1385. static void sub_ixd_rgd(void)   { SUB_M(IXD,RGD); }
  1386. static void sub_ixd_in(void)    { SUB_M(IXD,IN);  }
  1387. static void sub_ixd_ind(void)   { SUB_M(IXD,IND); }
  1388. static void sub_ixd_de(void)    { SUB_M(IXD,DE);  }
  1389. static void sub_ixd_ded(void)   { SUB_M(IXD,DED); }
  1390. static void sub_ixd_ix(void)    { SUB_M(IXD,IX);  }
  1391. static void sub_ixd_ixd(void)   { SUB_M(IXD,IXD); }
  1392.